달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
반응형

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 권한이 필요하다.

반응형
Posted by 친절한 웬디양~ㅎㅎ
|