ALTER TABLE - 기존 테이블의 구조 변경을 하는 DDL명령어 입니다.
테이블을 생성하면서 컬럼의 추가, 수정, 삭제를 할 때 사용합니다.
컬럼추가
ALTER TABLE 테이블명
ADD(컬럼명 DataType);
컬럼을 추가하는 형식입니다.
-추가된 컬럼의 마지막 부분에 생성이 됩니다.
-수정할 테이블에 기존의 추가한 데이터가 존재하면 컬럼 값은 NULL로 입력됩니다.
![](https://t1.daumcdn.net/cfile/tistory/99F65E4A5BE1D8C404)
| alter table a1 add(age number); | cs
|
보이는 것과 같이 AGE 컬럼이 추가되었고, 데이터 값은 NULL로 입력됩니다.
컬럼변경
ALTER TABLE MODIFY 명령문을 이용하여 테이블에서의 컬럼의 타입, 크키, 기본 값 변경을 할 수 있다.
ALTER TABLE 테이블명
MODIFY(컬럼명 DataType);
기존 컬럼에 데이터가 없는 경우
-컬럼의 데이터 타입 변경이 자유롭다.
-컬럼의 크기 변경이 자유롭다.
|
기존 컬럼에 데이터가 존재하는 경우
-데이터 타입 변경은 CHAR과 VERCHAR2만 가능하다.
-변경할 컬럼의 크기가 저장된 데이터의 크기보다 같거나 클 경우에만 가능하다. |
![](https://t1.daumcdn.net/cfile/tistory/99EE133E5BE1DD9607)
| alter table a1 modify(name varchar2(5)); alter table a1 modify(name varchar2(30)); | cs |
처음 name의 크기변경을 할 때 5보다 큰 데이터 값이 있기 때문에 변경 불가
기존 데이터 타입보다 큰 30으로 변경 가능
name 의 데이터값이 변경된것을 확인할 수 있습니다.
컬럼제거
- 2개 이상의 컬럼을 가진 기존테이블의 특정 컬럼과 컬럼의 데이터 삭제 가능
- 한번의 하나의 컬럼만 삭제가 가능
- 삭제된 컬럼은 복구 불가능
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
![](https://t1.daumcdn.net/cfile/tistory/99A72A475BE1DFFD08)
| alter table a1 drop column age; | cs |
삭제된 것을 볼 수 있습니다.
SET UNUSED
시스템의 요구가 적을 때 컬럼을 제거할 수 있도록 하나 이상의 칼럼을 UNUSED로 표시한다.
실제로 테이블에서 제거되지 않는다.
사용이유
테이블에 저장된 내용이 많을 경우 컬럼 삭제시 많은 시간이 소요된다. 그 시간중에 다른 사용자가 컬럼에 접근하면 , 테이블이 사용되고 있기에 다른 사용자는 해당 테이블을 이용할 수 없다. 이럴경우 rock이 발생하게된다.
SET UNUSED옵션은 DROP명령 실행시 걸리는 시간보다 응답시간이 빠르고, UNUSED로 표시된 컬럼은 데이터가 존재해도 삭제된 것으로 처리되기 때문에 사용한다.
테이블에서 id제거하기
![](https://t1.daumcdn.net/cfile/tistory/99A779475BE2026018)
| alter table a2 set unused(id); | cs |
실제로 컬럼명이 나타나지 않는 것을 볼 수 있다.
하지만 실제로 제거된 것이 아니다.
테이블에서 현재 UNUSED로 표시된 모든 컬럼 제거하기
![](https://t1.daumcdn.net/cfile/tistory/99A569435BE2030117)
| alter table a2 drop unused columns; | cs |