Oracle - ALTER TABLEOracle - ALTER TABLE
Posted at 2013. 8. 30. 18:09 | Posted in DataBase1. 새 컬럼 추가
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 |