ALTER문
- 객체에 대한 모든 변경을 위해 사용
- 생성된 테이블의 속성과 속성에 관한 제약, 그리고 기본키 및 외래키를 변경한다
형식
ALTER TABLE 테이블이름
[ADD 속성이름 데이터타입] -- 컬럼 추가
[DROP COLUMN 속성이름] -- 컬럼 삭제
[MODIFY 속성이름 데이터타입] -- 컬럼 수정
[MODIFY 속성이름 데이터타입 [NULL | NOT NULL]] -- 컬럼 수정 (널 허용/비허용)
[ADD PRIMARY KEY(속성이름)] -- 기본키 추가
[[ADD | DROP] 제약이름] -- 제약조건 추가 또는 삭제
ALTER TABLE
- 새로운 컬럼을 추가, 삭제 변경할 수 있다.
- 새로운 컬럼을 추가하면 기존의 테이블의 마지막 컬럼이 된다.
|
추가 |
수정 |
삭제 |
column |
가능 |
가능 |
가능 |
constraint |
가능 |
불가능 |
가능 |
ALTER TABLE ADD
- 테이블에 컬럼 추가 또는 컬러멩 constraint(제약조건)이 없을 경우 constraint를 추가하는데 사용한다.
- 컬럼 추가시 테이블의 행이 존재한다면, 새로 추가되는 컬럼은 이미 존재하는 모든 행의 값을 NULL로 초기화한다.
- 컬럼추가 형식
ALTER TABLE 테이블명
ADD (컬럼명 데이터타입 [DEFAULT 값] [, 컬럼명 데이터타입] .... );
- 제약조건(Constraint) 추가 형식
ALTER TABLE 테이블명
ADD (컬럼명 데이터타입 CONSTRAINT constraint명 constraint실제값
[, 컬럼명 데이터타입]...);
- 한 번의 ADD 명령으로 여러 개의 컬럼 추가 가능하고, 하나의 컬럼만 추가하는 경우에는 괄호를 생각해도 된다.
- CONSTRAINT 변경 여부 확인은 USER_CONSTRAINTS 뷰를 사용하여 확인할 수 있다.
- CREATE TABLE AS….와 같은 서브쿼리를 사용하여 만든 테이블은 NOT NULL만 복사되며, PRIMARY KEY와 같은 제약조건은 복사되지 않는다.
- 그러므로 서브쿼리로 만든 테이블에 CONSTRAINT를 추가해 주어야 한다.
- 추가된 컬럼은 테이블의 마지막 부분에 생성되며 사용자가 컬럼의 위치를 지정할 수 없다.
- 추가된 컬럼에도 기본 값을 지정할 수 있다.
- 기존 데이터가 존재하면 추가된 컬럼 값은 NULL로 입력 되고, 새로 입력되는 데이터에 대해서만 기본 값이 적용된다.
ALTER TABLE MODIFY
- 테이블의 컬럼을 변경하고자 할 때 사용
- 형식
ALTER TABLE 테이블명
MODIFY (컬럼명 데이터타입 [DEFAULT 값] [, 컬럼명 데이터타입] ... );
- 데이터의 타입, 크기, 기본값을 변경할 수 있다.
- 변경 대상 컬럼에 데이터가 없거나 NULL 값만 존재할 경우에만 SIZE를 줄일 수 있다.
- 데이터 타입의 변경은 CHAR와 VARCHAR2 상호간의 변경만 가능하다.
- 컬럼 크기의 변경은 지정된 데이터의 크기보다 같거나 클 경우에만 가능하다.
- NOT NULL 컬럼인 경우에는 크기의 확대만 가능하다.
- 컬럼의 기본값 변경은 그 이후에 삽입되는 행부터 영향을 준다.
- ALTER TABLE … MODIFY를 이용하여 CONSTRAINTS를 수정할 수 없다.
구분 | 데이터 타입 변경 가능사항 | 크기 | |
NULL 컬럼 | 문자 ↔ 숫자 ↔ 날짜 | 확대, 축소 가능 | |
NOT NULL 컬럼 | CHAR ↔ VARCHAR2 | 확대만 가능 |
ALTER RENAME COLUMN
- 컬럼명 변경
- 형식
ALTER TABLE 테이블명
RENAME COLUMN 기존컬럼명 TO 변경할컬럼명;
ALTER TABLE DROP COLUMN 컬럼명
- 특정 테이블의 컬럼을 삭제
- 형식
ALTER TABLE 테이블명
DROP COLUMN 컬럼명;
- 컬럼을 삭제하면 해당 컬럼에 저장된 데이터도 함께 삭제된다.
- 한번에 하나의 컬럼만 삭제할 수 있다.
- 삭제 후 테이블에는 적어도 하나의 컬럼은 존재해야 한다.
- DDL문으로 삭제된 컬럼은 복구할 수 없다.
'프로그래밍 > Oracle' 카테고리의 다른 글
오라클 커서를 사용하는 다양한 방법 (1234) | 2020.05.13 |
---|---|
마로의 Oracle 공부: DDL(3) - DROP (471) | 2016.12.14 |
마로의 Oracle 공부: DDL(1) - CREATE (477) | 2016.10.26 |
마로의 Oracle 공부: SQL 기초 (488) | 2016.01.04 |