더북(TheBook)

테이블 변경

CREATE문으로 테이블을 생성한 후 불가피하게 수정해야 할 상황이 발생할 때가 많다. 최초 설계를 잘못한 원인도 있고 요구사항이 변경되기 때문이기도 하다. 사람이 하는 일이라 처음부터 완벽하게 테이블을 만드는 것은 거의 불가능하다. 이런 원인으로 기존에 생성했던 컬럼의 데이터 타입을 수정하거나 삭제, 새로운 컬럼을 넣어야 하는 경우가 발생하는데, 이때마다 테이블을 삭제하고 다시 생성하는 것은 여러 문제를 만들 수 있다. 이럴 때 ALTER TABLE문을 사용해 테이블을 수정할 수 있다. 그럼 ex2_10 테이블을 다시 생성한 후 하나씩 처리해 보자.

입력

    CREATE TABLE ex2_10 (
           Col1        VARCHAR2(10) NOT NULL,
           Col2        VARCHAR2(10) NULL,
           Create_date DATE DEFAULT SYSDATE);

결과

    table EX2_10이(가) 생성되었습니다.

① 컬럼명 변경: col1 컬럼 이름을 col11으로 변경

    ALTER TABLE [스키마.]테이블명 RENAME COLUMN 변경전컬럼명 TO 변경후컬럼명;

입력

    ALTER TABLE ex2_10 RENAME COLUMN Col1 TO Col11;

결과

    table EX2_10이(가) 변경되었습니다.

DESC 테이블명 명령어로 테이블에 있는 컬럼 내역을 확인해 보자.

입력

    DESC ex2_10;

결과

    이름              널           유형
    ---------------- ------------ ------------
    COL11            NOT NULL     VARCHAR2(10)
    COL2                          VARCHAR2(10)
    CREATE_DATE                   DATE

col1 컬럼이 col11로 변경됐음을 확인할 수 있다.

② 컬럼 타입 변경: col2 컬럼을 VARCHAR2(10)에서 VARCHAR2(30)으로 변경

    ALTER TABLE [스키마.]테이블명 MODIFY 컬럼명 데이터타입;

입력

    ALTER TABLE ex2_10 MODIFY Col2 VARCHAR2(30);

결과

    table EX2_10이(가) 변경되었습니다.

입력

    DESC ex2_10;

결과

    이름        널        유형
    ----------- --------- ------------
    COL11       NOT NULL  VARCHAR2(10)
    COL2                  VARCHAR2(30)
    CREATE_DATE           DATE

③ 컬럼 추가: col3 NUMBER 타입으로 신규 생성

    ALTER TABLE [스키마.]테이블명 ADD 컬럼명 데이터타입;

입력

    ALTER TABLE ex2_10 ADD Col3 NUMBER;

결과

    table EX2_10이(가) 변경되었습니다.

입력

    DESC ex2_10;

결과

    이름        널       유형
    ----------- -------- ------------
    COL11       NOT NULL VARCHAR2(10)
    COL2                 VARCHAR2(30)
    CREATE_DATE          DATE
    COL3                 NUMBER

④ 컬럼 삭제: col3 컬럼을 삭제

    ALTER TABLE [스키마.]테이블명 DROP COLUMN 컬럼명;

입력

    ALTER TABLE ex2_10 DROP COLUMN Col3 ;

결과

    table EX2_10이(가) 변경되었습니다.

 


입력

    DESC ex2_10;

결과

    이름         널       유형
    ----------- -------- ------------
    COL11       NOT NULL VARCHAR2(10)
    COL2                 VARCHAR2(30)
    CREATE_DATE          DATE

⑤ 제약조건 추가: col11에 기본키 추가

    ALTER TABLE [스키마.]테이블명 ADD CONSTRAINTS 제약조건명 PRIMARY KEY (컬럼명, ..);

 

입력

    ALTER TABLE ex2_10 ADD CONSTRAINTS pk_ex2_10 PRIMARY KEY (col11);

결과

    table EX2_10이(가) 변경되었습니다.

입력

    SELECT constraint_name, constraint_type, table_name, search_condition
      FROM user_constraints
     WHERE table_name = 'EX2_10';

결과

    CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME          SEARCH_CONDITION
    --------------- --------------- ------------------- ----------------
    SYS_C0011184C   EX2_10          "COL11" IS NOT NULL
    PK_EX2_10       P               EX2_10

⑥ 제약조건 삭제: col11에서 기본키 삭제

    ALTER TABLE [스키마.]테이블명 DROP CONSTRAINTS 제약조건명;

 

입력

    ALTER TABLE ex2_10 DROP CONSTRAINTS pk_ex2_10;

결과

    table EX2_10이(가) 변경되었습니다.

입력

    SELECT constraint_name, constraint_type, table_name, search_condition
      FROM user_constraints
     WHERE table_name = 'EX2_10';

결과

    CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME  SEARCH_CONDITION
    --------------- --------------- ----------- ----------------
    SYS_C0011184C   EX2_10          "COL11"     IS NOT NULL

기본키 뿐만 아니라 다른 제약조건도 고유의 제약조건명이 존재하므로 추가나 삭제가 가능하다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.