테이블에 정의된 내용을 수정할 때 사용하는 데이터 정의어이다.
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 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 TABLE 테이블명 MODIFY 컬럼명 자료형;
ALTER TABLE TBL_USERALTER MODIFY GENDER CHAR(10);
데이터베이스 객체(TABLE, USER)를 삭제하는 구문이다.
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;는 테이블 자체를 삭제하는 구문이다.