Skip to content

SQL DDL #
Find similar titles

DDL (데이터 정의 언어 : Data Definition Language) #

DDL(Data Definition Language)은 데이터의 구조를 정의하는 데 사용하는 SQL 문으로 이 SQL을 사용하여 데이터의 구조를 생성, 변경, 삭제 등을 수행할 수 있다.

  • 스키마 객체를 생성, 변경, 삭제할 수 있다.
  • CREATE, ALTER, DROP 명령어는 작업할 객체에 단독으로 접근해야 한다. 예를 들어 다른 사용자가 작업할 테이블에 트랜잭션을 열고 있다면 자신의 ALTER TABLE 문장은 실패한다.

DDL의 종류 #

CREATE #

CREATE Table, CREATE Sequences, CREATE Index, CREATE View 등과 같이 객체를 생성하는 데 사용한다.

TABLE #

  • 테이블 명은 다른 테이블의 이름과 중복될 수 없다.
  • 한 테이블 내에서 컬럼 명은 중복될 수 없다.
  • 테이블 명은 영문자로 시작해야 한다.
  • 내장 키워드는 테이블 명 또는 컬럼 명으로 사용할 수 없다.

    CREATE TABLE table_name (
    
        column_name1 데이터타입(크기) [DEFAULT value],
        column_name2 데이터타입(크기) [DEFAULT value],
        ...
    );
    

CONSTRAINT (제약조건) #

  • PRIMARY KEY (기본키, PK) : 테이블 내의 개별 데이터를 식별하기 위해 정의된 제약조건이다. 이 조건을 설정한 컬럼의 데이터는 컬럼 내에서 중복될 수 없으며 Null값을 허용하지 않는다. 즉 PK는 Unique + Not Null의 제약조건을 갖는다.
  • FOREIGN KEY (외래키, FK) : 부모 테이블과 자식 테이블 간의 관계를 정의하기 위해 부모 테이블의 PK값을 참조하는 자식 테이블의 제약조건이다.
  • UNIQUE KEY (고유키, UK) : 테이블 내의 개별 데이터를 고유하게 식별하기 위한 제약조건이다.
  • NOT NULL (NN) : 해당 컬럼의 데이터값에 Null을 허용하지 않는 제약조건이다. 즉 필수입력을 의미한다.
  • CHECK (CK) : 해당 컬럼에 허용할 수 있는 데이터 값의 범위를 제한한다.

    CREATE TABLE table_name (
    
        column_name1 데이터타입(크기) [DEFAULT value],
        column_name2 데이터타입(크기) [DEFAULT value],
        CONSTRAINT constraint_name constraint_type(column1[, column2...]),
        ...
    );
    

SEQUENCE #

CREATE SEQUENCE sequence_name

    [INCREMENT BY n]        -- 증가 값
    [START WITH n]          -- 시작 값
    [MINVALUE n]            -- 최소 값
    [MAXVALUE n|NOMAXVALUE] -- 최대 값
    [CYCLE|NOCYCLE]         -- 최대 값 이후 시작 값으로 되돌아갈지 여부
    [CACHE n|NOCACHE]       -- 시퀀스 생성 캐싱 여부 및 캐쉬 값
;

INDEX #

CREATE INDEX index_name on table_name (column_name[,column_name...]);

VIEW #

CREATE OR REPLACE VIEW view_name (column_name1[,column_name2...]) AS
    SELECT column_name1[,column_name2...]
    FROM table_name;

ALTER #

ALTER Table, ALTER Sequences, ALTER Index, ALTER View 등과 같이 객체를 변경하는 데 사용한다.

ADD (컬럼 추가) #

ALTER TABLE table_name 
    ADD (컬럼1 데이터타입(크기) [제약조건], 컬럼2 데이터타입(크기)...);

MODIFY (컬럼 유형 변경) #

  • 컬럼 유형 변경

    ALTER TABLE table_name 
        MODIFY (컬럼1 데이터타입(크기), 컬럼2 데이터타입(크기)...);
    
  • 제약조건 변경

    ALTER TABLE table_name 
        MODIFY (컬럼1 CONSTRAINT 제약조건명 제약조건(컬럼명 조건식));
    

RENAME #

테이블과 컬럼의 이름을 변경하는 데 사용한다.

  • 테이블명 변경

    RENAME from_table_name TO to_tale_name;
    
  • 컬럼명 변경

    ALTER TABLE table_name 
        RENAME COLUMN from_col_name TO to_col_name;
    

DROP #

DROP Table, DROP Sequences, DROP Index, DROP View 등과 같이 개체를 삭제하는 데 사용한다.

  • 테이블, 시퀀스, 인덱스, 뷰 삭제

    DROP TABLE table_name;
    DROP SEQUENCE sequence_name;
    DROP INDEX index_name;
    DROP VIEW view_name;
    
  • 테이블과 함께 참조된 제약조건을 모두 삭제할 경우

    DROP TABLE table_name CASCADE CONSTRAINTS;
    
  • 컬럼 삭제

    ALTER TALLE table_name DROP COLUMN column_name;
    
  • 삭제할 컬럼에 제약조건이 존재할 경우

    ALTER TABLE table_name DROP COLUMN column_name CASCADE CONSTRAINTS;
    

TRUNCATE #

테이블에서 영구적으로 모든 행을 삭제할 때 이 구문을 사용하며 "DELETE FROM table_name" 구문과 동일하다. 이 구문은 롤백 되지 않는다.

TRUNCATE TABLE table_name;
0.0.1_20140628_0