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문으로 삭제된 컬럼은 복구할 수 없다.


+ Recent posts