[DDL]ALTER, DROP

EUNJI LEE·2023년 4월 10일
0

SQL

목록 보기
8/14

ALTER

테이블에 정의된 내용을 수정할 때 사용하는 데이터 정의어이다.

ALTER 컬럼 추가

ALTER TABLE 테이블명 ADD(컬럼명 자료형(길이) [제약조건]); 형태로 테이블에 정의되어있는 컬럼, 제약 조건을 수정할 때 사용할 수 있다. ALTER는 수정하는 정의어라서 컬럼을 추가하는 기능이 왜 ALTER에 포함인가 의문이 들 수 있지만 이미 생성된 테이블에 새로운 컬럼을 넣어서 “수정”하는 것으로 기억하면 좋다.

CREATE TABLE TBL_USERALTER(
    USER_NO NUMBER PRIMARY KEY,
    USER_ID VARCHAR2(20),
    USER_PWD VARCHAR2(20)
);

--컬럼 추가
ALTER TABLE TBL_USERALTER ADD(USER_NAME VARCHAR2(20));
--컬럼 추가 후 데이터 삽입
INSERT INTO TBL_USERALTER VALUES(1,'ADMIN','1234','관리자');
--테이블에 데이터가 있는 상태에서 컬럼 추가
ALTER TABLE TBL_USERALTER ADD(NICKNAME VARCHAR2(20));
-->NULL값이 삽입

DESC TBL_USERALTER; 실행 해서 추가된 컬럼 확인

💡 테이블에 ROW가 있는 상태로 새로운 컬럼을 추가하면 기본적으로 NULLABLE 상태를 갖기 때문에 새로 생성된 컬럼값은 NULL이 들어간다.
이 때, 컬럼을 추가하면서 NOT NULL 제약 조건을 넣으면 ROW가 존재하기 때문에 NOT NULL 제약 조건인 컬럼은 추가할 수 없다. DEFAULT값을 설정해서 NULL값이 안 들어가게 하면 추가할 수 있다.

--NOT NULL 제약 조건과 DEFAULT를 동시에 설정.
ALTER TABLE TBL_USERALTER ADD(EMAIL VARCHAR2(40) DEFAULT'미설정' NOT NULL);
--EMAIL컬럼 자리에 DEFAULT값 대입
INSERT INTO TBL_USERALTER VALUES(2,'USER01','USERPW01','유저01',DEFAULT);

ALTER 제약 조건 추가,수정

ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건설정(컬럼명); 구문을 사용해서 제약 조건을 추가할 수 있다. 이 때 NOT NULL은 컬럼에 NULLABLE이 적용되어 있기 때문에 추가하는 기능인 ADD가 아닌 수정하는 기능인 MODIFY로 작성한다.

ALTER TABLE TBL_USERALTER ADD(GENDER VARCHAR(10)
		CONSTRAINT GENDER_CK CHECK(GENDER IN('남','여')));
--INSERT INTO TBL_USERALTER 
		--VALUES(2,'USER01','USER01','유저1','유저','USER01@USER.COM','가');
-->⚠️ORA-02290: 체크 제약조건(BS.GENDER_CK)이 위배되었습니다
INSERT INTO TBL_USERALTER
			VALUES(3,'USER02','USER02','유저2','유저','USER01@USER.COM','여');

ALTER TABLE TBL_USERALTER ADD CONSTRAINT USERID_UQ UNIQUE(USER_ID);
INSERT INTO TBL_USERALTER
			VALUES(4,'USER01','USER01','유저1','유저','USER01@USER.COM','여');
-->⚠️ORA-00001: 무결성 제약 조건(BS.USERID_UQ)에 위배됩니다

--USER_PWD에 NOT NULL 제약 조건 설정
ALTER TABLE TBL_USERALTER MODIFY USER_PWD CONSTRAINT USERPWD_NN NOT NULL;

제약 조건명 변경

ALTER TABLE 테이블명 RENAME CONSTRAINT 제약조건명 TO 제약조건명; 으로 작성할 수 있다. Ctrl을 누른 상태로 테이블 명을 마우스로 클릭하면 해당 테이블 정보를 확인할 수 있는 창이 뜬다. 해당 창에서 제약 조건 페이지로 넘어가면 제약 조건에 대한 정보를 확인할 수 있다.

ALTER TABLE TBL_USERALTER RENAME CONSTRAINT SYS_C007424 TO USERALTER_PK;

ALTER 컬럼 수정

컬럼의 타입, 크기를 변경한다. ALTER TABLE 테이블명 MODIFY 컬럼명 자료형;

ALTER TABLE TBL_USERALTER MODIFY GENDER CHAR(10);

DROP

데이터베이스 객체(TABLE, USER)를 삭제하는 구문이다.

DROP 테이블 삭제

DROP TABLE 테이블명; 구문으로 삭제할 수 있다. 이 때, 테이블 삭제 시 FEREIGN KEY 제약 조건에 설정되어 있다면 기본적으로 삭제가 불가능하다. 참조되는 키가 존재하기 때문에 참조된 키를 가진 테이블이 먼저 삭제되어야 가능해진다. 그래서 CASCADE 명령어를 작성해서 테이블 자체를 삭제할 수 있다.

--테이블 삭제
DROP TABLE TBL_USERALTER;

--FORIEGN KEY가 존재하는 테이블 삭제
ALTER TABLE EMP_COPY ADD CONSTRAINT EMP_ID_PK PRIMARY KEY(EMP_ID);
CREATE TABLE TBL_FKTEST(
    EMP_ID VARCHAR2(20) CONSTRAINT FK_EMPID REFERENCES EMP_COPY(EMP_ID),
    CONTENT VARCHAR2(20)
);
--DROP TABLE EMP_COPY;
-->⚠️ORA-02449: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있습니다
--참조되는 키가 존재하기 때문에 TBL_FKTEST가 먼저 삭제되아야 가능

--옵션 설정해서 삭제
DROP TABLE EMP_COPY CASCADE CONSTRAINT;
✅ ON DELETE CASCADE는 ROW를 삭제하는 구문이고 DROP TABLE 테이블명 CASCADE CONSTRAINT;는 테이블 자체를 삭제하는 구문이다.
profile
천천히 기록해보는 비비로그

0개의 댓글