ALTER(바꾸다, 변조하다)
- 수정 가능한 것 : 컬럼(추가/수정/삭제), 제약조건(추가/삭제), 이름변경(테이블, 컬럼, 제약조건)
- 테이블을 수정하는 경우 : ALTER TABLE 테이블명 ADD | MODIFY | DROP 수정할 내용;
제약조건 추가 / 삭제
- 제약조건 추가 : ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] 제약조건(컬럼명) [REFERENCES 테이블명[(컬럼명)];
* NOT NULL은 MODIFY 사용
- 제약조건 삭제 : ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
* 삭제도 마찬가지로 NOT NULL은 MODIFY 사용
컬럼 추가 / 수정 / 삭제
- 컬럼 추가 : ALTER TABLE 테이블명 ADD (컬럼명 데이터타입 [DEFAULT '값']);
- 컬럼 수정 : ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입;(데이터타입 변경)
ALTER TABLE 테이블명 MODIFY 컬럼명 DEFAULT '값'; (기본값 변경)
- 컬럼 삭제 : ALTER TABLE 테이블명 DROP (삭제할 컬럼명);
ALTER TABLE 테이블명 DROP COLUMN (삭제할 컬럼명);
* 테이블에는 최소 1개 이상의 컬럼이 존재해야 하기 때문에 모든 컬럼 삭제X
** CREATE / ALTER / DROP 같은 DDL은 롤백의 대상이 아님 **
DDL/DML을 혼용해서 사용할 경우 발생하는 문제점으로, DML을 수행하여 트랜잭션에 변경사항이
저장된상태에서 커밋/롤백 없이 DDL 구문을 수행하게 되면 DDL 수행과 동시에 선행 DML이 자동으로 커밋됨
테이블 삭제
- 작성법 : DROP TABLE 테이블명 [CASCADE CONSTRAINTS];
--> TB1 (부모 테이블) , TB2 (자식 테이블)
--> TB1 테이블을 삭제할 경우 TB2가 TB1을 참조하고 있기 때문에 TB1테이블 삭제 불가능
-->> ORA-02449: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있습니다.
- 해결방법
--> 제약조건까지 모두 삭제
컬럼, 테이블명, 제약조건명 변경
- 컬럼명 변경 : ALTER TABLE 테이블명 RENAME COLUMN 컬럼명 TO 변경명
- 테이블명 변경 : ALTER TABLE 테이블명 RENAME TO 변경명
- 제약조건명 변경 : ALTER TABLE 테이블명 RENAME CONSTRAINT 제약조건명 TO 변경명