Oracle - ALTER TABLEOracle - ALTER TABLE

Posted at 2013. 8. 30. 18:09 | Posted in DataBase
반응형

1. 새 컬럼 추가 
    alter table 테이블이름 
    add (컬럼이름 데이터타입 [default 표현식] [, 다른 컬럼 정의...]); 

    ex) alter table any_table add ( any_column1 int not null, any_column2 int); 

- 추가된 컬럼은 항상 마지막 순서에 놓인다.(컬럼 순서를 변경할 수 없다.) 
- 추가된 데이터는 각 행에 널값으로 삽입된다. 
 테이블 내에 레코드가 존재한다면 낫널인 컬럼을 추가할 수 없다. 
 빈 테이블일 경우 낫 널을 부여할 수 있다. 

2. 존재하는 컬럼 수정 
    alter table 테이블이름 
    modify (컬럼이름 데이터타입 [default 표현식] [, 다른 컬럼 정의...]); 

    ex) alter table any_table modify (any_column1 varchar2(20)); 

- 타입, 사이즈, 기본값을 변경 가능 
- 디폴트 값을 변경했을 경우 이후 삽입되는 데이터에 대해서만 적용된다. 

가이드라인 
- 숫자형 사이즈 증가 가능 
- 문자형 데이터 사이즈 증가 가능 
- 사이즈 줄일 수 있는 경우 
        모든 값이 널일 경우 
        레코드가 없을 경우 
        줄이고자 하는 사이즈가 현재 들어가있는 값들보다 작을 경우 
- 컬럼의 모든 값이 널 값일 경우 컬럼의 타입을 변경 가능하다. 
        char를 varchar2 형태로 바꿀 때는 타입 변경 가능. 
- cahr to varchar2, varchar2 to char 변환은 컬럼이 널값만 가지고 있거나 사이즈 변경이 없을 경우만. 
- 디폴트 값은 다음 입력부터 반영 

3. 컬럼 드랍 
    alter table 테이블이름 
    drop (컬럼이름); 

    ex) alter table any_table drop (any_column1); 

- 컬럼에 데이터 존재 유무에 무관하게 드랍 가능 
- 한번에 한 컬럼만 삭제 가능하다. 
- 테이블은 적어도 한개의 컬럼은 가지고 있어야 한다. 
- 드랍하고 나면 복구 불가능 
- 제약의 일부이거나 인덱스의 일부일 경우 삭제할 수 없다. 
 cascade옵션을 추가한다. 
- 레코드가 많은 경우 드랍 칼럼은 옳지 않다. 락을 피하기 위해 유저가 적을때 unused를 쓰고 드랍하자. 

4. set unused 옵션 

- 더이상 사용하지 않는 컬럼에 대해 set unused를 사용한다. 

    alter table 테이블 이름 
    set unused (컬럼 이름); 
or 
    alter table 테이블 이름 
    set unused column (컬럼 이름);    

then 

    alter table 테이블이름 
    drop unused columns; 

set unused 옵션도 복구가 불가능하다. 
딕셔너리의 USER_UNUSED_COL_TABS 에 저장된다. 

5. 제약 추가 

- 제약을 추가하거나 드랍할 수 있지만 존재하는 제약을 수정할 수는 없다. 
- 제약을 활성화, 비활성화 할 수 있다. 
- 낫널 제약을 추가할 때는 반드시 modify를 함께 사용한다. 

    alter table 테이블명 
    add [constraint 제약명] 
    타입 (컬럼명); 

- 낫널은 테이블이 비어있거나 해당 컬럼의 모든 레코드가 값을 가질 경우 가능하다. 

6. on delete cascade 


    alter table Emp2 
    add constraint emp_dt_fk 
    foreign key (Department_id) 
    references departments on delete cascade); 

    on delete cascade 
- 부모 테이블의 레코드가 삭제되면 같이 삭제될것 

7. 제약 드랍 

    alter table emp2 
    drop constraint emp_mgr_fk; 


    - pk를 참조하는 fk도 함께 삭제하기 위해 cascade를 사용한다. 
    alter table dept2 
    drop primary key cascade; 


!! 제약을 드랍하기 위해 제약 이름을 USER_CONSTRAINRS와 USER_CONS_COLUMNS에서 확인할 수 있다. 

8. 제약 비활성화/활성화 

제약 비활성화 

- disable 절을 이용해 비활성화 
- cascade 옵션으로 종속적인 constraints도 함께 비활성화 

    alter table emp2 
    disable  constraint emp_dt_fk; 

- pk나 uk를 비활성화 할 경우 내부적으로 uk를 삭제해버린다. 


제약 활성화 

    alter table emp2 
    enable  constraint emp_dt_fk; 

- 활성화할 경우 모든 데이터에 대해 제약 조건 검사를 한다. 
- pk, uk가 활성화 될 경우 uk가 자동으로 생성된다. 
- enable은 create table, alter table에 모두 사용할 수 있다. 
- cascade 로 비활성화된 포린 키는 활성화되지 않는다. 
- uk, pk를 활성화하기 위해 create index 권한이 필요하다.

반응형

'DataBase' 카테고리의 다른 글

솔라리스에 오라클 8.1.6 설치하기  (0) 2013.08.30
Oracle 9i 언어변경하는 방법  (0) 2013.08.30
Oracle CharacterSET 변경  (0) 2013.08.30
exp / imp 정리 및 실습  (0) 2013.08.30
오라클 테이블 락 ( Table lock  (0) 2013.08.30

//