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 제약조건도 같이 삭제 되었다.


카운터

Total : / Today : / Yesterday :
get rsstistory!