1. ALTER
컬럼, 제약조건등에 대한 사항을 변경할 수 있다.
** [ ]안의 내용은 옵션으로 필요해 의해 사용 또는 특별한 용도에만 쓰인다.
ALTER TABLE 테이블명
1) ADD (새컬럼명 데이터타입 [default값] [제약조건 제약명] );
ADD [CONSTRAINT 제약명] 제약종류(컬럼명);
새로운 컬럼을 추가한다. 생성하면서 Constraint(제약조건)을 줄 수 있다.
ex1) alter table test_tb add(location varchar2(10) default '서울');
alter table test_tb add(no number(4) not null);
alter table test_tb add constraint pk_test_tb primary Key(no);
2) DROP COLUMN 지울컬럼명;
테이블내의 컬럼을 지울때 사용.
ex2) alter table test_tb drop COLUMN no;
DROP CONSTRAINT 제약명 [CASCADE];
FK(Foreign Key)에 의해 참조되고 있는 컬럼의 PK, UK 제약조건을 지울때, CASCADE 옵션과
함께 연관된 FK 제약조건도 삭제.
ex8) 참조.
3) SET UNUSED COLUMN 사용하지않을컬럼;
컬럼의 data에 대한 물리적인 삭제를 하지 않은 상태에서 data dictionary에만 해당하는 컬럼의
등록내용(INDEX)을 지운다.
** data dictionary : 읽기전용 테이블 인덱스의 집합으로 'sql'문으로만 접근할 수 있다.
ex3) alter table test_tb SET UNUSED column no;
4) MODIFY (기존컬럼명 데이터타입);
컬럼에 data가 없을 경우에 컬럼의 내용(데이터타입, 데이터타입 값의 크기, default 값의 변경 등
등..)을 바꿈. 단 default 값은 기존의 data값은 그대로 두고 새로운 'insert' 이후에 적용 된다.
ex4) alter table test_tb modify(id varchar2(20)); // 컬럼 id의 varchar2의 size를 20으로 변경.
alter table test_tb modify(id number); // 컬럼 id의 데이터타입 varchar2를 number로 변경
alter table test_tb modify(id varchar2(30));
// 컬럼 id의 데이터타입 number를 varchar2로, 사이즈는 30으로 변경했다.
5) ENABLE CONSTRAINT 제약명;
비활성된 제약조건을 활성화 시킨다. 해당 컬럼의 모든 data는 제약조건에 위배되면 실행(X)
-> enable novaildate constraint 제약명; 으로 위배조건 무시가능함.
ex7) 참조.
6) DISABLE CONSTRAINT 제약명 [CASCADE];
활성된 제약조건을 비활성화 한다. FK에 의해 참조되는 컬럼의 PK, UK 제약조건의 비활성화는
CASCAE 옵션과 함께 연관된 FK 제약조건도 비활성화 된다.
ex6) 참조.
** database Study의 '[oracle] Constraint(제약조건)' 의 ex1,2) 테이블 참조.
ex5) staff, department 테이블 각각의 제약조건 확인
select table_name, constraint_name, status from user_constraints
where table_name = 'staff';
TABLE _NAME CONSTRAINT_NAME STATUS
-------------- -------------------- --------
STAFF STAFF_ID_PK ENABLED
STAFF STAFF_ID_DEPT_ID ENABLED
select table_name, constraint_name, status from user_constraints
where table_name = 'DEPARTMENT';
TABLE_NAME CONSTRAINT_NAME STATUS
-------------- ------------------- --------
DEPARTMENT DEPARTMENT_ID_PK ENABLED
ex6) enable -> disable
alter table department disable constraint DEPARTMENT_ID_PK;
alter table department
*
ERROR at line 1:
ORA-02 ~~ cannot disable constraint(WINNER.DEPARTMENT_ID_PK) - dependencies exist
// FK에 의해 참조되어있어 PK를 disable할 수 없다.
alter table department disable constraint DEPARTMENT_ID_PK CASCADE;
Table altered.
// 'CASCADE'를 옵션으로 주면 disable 가능하다.
select table_name, constraint_name, status from user_constraints
where table_name = 'DEPARTMENT';
TABLE_NAME CONSTRAINT_NAME STATUS
-------------- ------------------- --------
DEPARTMENT DEPARTMENT_ID_PK DISABLED
select table_name, constraint_name, status from user_constraints
where table_name = 'staff';
TABLE _NAME CONSTRAINT_NAME STATUS
-------------- -------------------- --------
STAFF STAFF_ID_PK ENABLED
STAFF STAFF_ID_DEPT_ID DISABLED
ex7) disable -> enable
alter table department enable constraint DEPARTMENT_ID_PK;
alter table department enable constraint STAFF_ID_DEPT_ID;
ex8) drop constraint
alter table department drop constraint DEPARTMENT_ID_PK CASCADE;
Table altered. // FK 제약조건이 DROP 됐음.
select table_name, constraint_name, status from user_constraints
where table_name = 'STAFF';
TABLE _NAME CONSTRAINT_NAME STATUS
-------------- -------------------- --------
STAFF STAFF_ID_PK ENABLED
select table_name, constraint_name, status from user_constraints
where table_name = 'DEPARTMENT';
no rows selected. // CASCADE 옵션에 의해 PK 제약조건도 같이 삭제 되었다.