DDL(CREATE/ALTER/DROP)

Published: Jan 13, 2020 by Dev-hwon

DDL(Data Definition Language, 데이터 정의어)

  • DDL은 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 제거할 때 사용하는 언어
  • DDL로 정의된 내용은 메타데이터가 되며, 시스템 카탈로그에 저장
명령문 기능
CREATE 스키마, 도메인, 테이블, 뷰, 인덱스를 정의
ALTER 테이블에 대한 정의를 변경
DROP 스키마, 도메인, 테이블, 뷰, 트리거, 인덱스를 제거

CREATE

CREATE SCHEMA

  • 스키마를 정의하는 명령문
  • 스키마는 하나의 응용(사용자)에 속하는 테이블과 기타 구성 요소 등을 그룹 짓기 위한 것
  • 스키마의 식별을 위한 스키마 이름과 해당 스키마의 소유권자나 허가권자를 정의
CREATE SCHEMA 스키마명 AUTHORIZATION 사용자_ID;

CREATE DOMAIN

  • 도메인을 정의하는 명령문
  • 도메인이란 하나의 속성이 취할 수 있는 동일한 타입의 원자값들의 집합
  • 특정 속성에서 사용할 데이터의 범위를 사용자가 정의하는 사용자 정의 데이터 타입
  • 일반적인 데이터 타입처럼 사용
CREATE DOMAIN 도메인명 데이터_타입
  [DEFAULT 기본값]
  [CONSTRAINT 제약조건명 CHECK (범위값)];

CREATE TABLE

  • 테이블을 정의하는 명령문
CREATE TABLE 테이블명
  (속성명 데이터_타입 [NOT NULL], ...
  [, PRIMARY KEY (기본키_속성명, ...)]
  [, UNIQUE(대체키_속성명, ...)]
  [, FOREIGN KEY (외래키_속성명, ...)
      REFERENCES 참조테이블(기본키_속성명, ...)]
      [ON DELETE 옵션]
      [ON UPDATE 옵션]
  [, CONSTRAINT 제약조건명][CHECK (조건식)]);
  • 기본 테이블에 포함될 모든 속성에 대하여 속성명, 속성의 데이터 타입, NOT NULL을 지정
  • PRIMARY KEY: 기본키로 사용할 속성 또는 속성의 집합을 지정
  • UNIQUE: 대체키로 사용할 속성 또는 속성의 집합을 지정하는 것, 중복은 안됨
  • FOREIGN KEY ~ REFERENCES ~: 외래키 속성과 참조 테이블에 관한 정보를 지정. 외래키가 지정되면 참조 무결성의 CASCADE 법칙이 적용
  • ON DELETE 옵션: 참조 테이블의 튜플이 삭제되었을 때 기본 테이블에 취해야할 사항을 지정. 옵션에는 NO ACTION, CASCADE, SET NULL, SET DEFAULT가 있다.
  • ON UPDATE 옵션: 참조 테이블의 참조 속성 값이 변경되었을 때 기본 테이블에 취해야 할 사항을 지정. 옵션에는 NO ACTION, CASCADE, SET NULL, SET DEFAULT가 있다.
    • NO ACTION: 참조 테이블에 변화가 있어도 기본 테이블에는 아무런 조취를 취하지 않는다.
    • CASCADE: 참조 테이블의 튜플이 삭제되면 기본 테이블의 관련 튜플도 삭제되고, 속성이 변경되면 관련 튜플의 속성 값도 변경
    • SET NULL: 참조 테이블에 변화가 있으면 기본 테이블의 관련 튜플의 속성 값을 NULL로 변경
    • SET DEFAULT: 참조 테이블에 변화가 있으면 기본 테이블의 튜플의 속성 값을 기본값으로 변경
  • CONSTRAINT: 제약 조건의 이름을 지정. 이름을 지정할 필요가 없으면 CHECK절만 사용하여 속성 값에 대한 제약 조건을 명시
  • CHECK: 속성 값에 대한 제약 조건을 지정

CREATE VIEW

  • 뷰는 하나 이상의 기본 테이블로부터 유도되는 이름ㅁ을 갖는 가상 테이블과
CREATE VIEW 뷰명[(속성명[, 속성명, ...])]
AS SELECT;
  • SELECT문을 서브 쿼리로 사용하여 SELECT문의 결과로서 뷰를 생성
  • 서브 쿼리인 SELECT문에는 UNION이나 ORDER BY절을 사용할 수 없다.
  • 속성명을 기술하지 않으면 SELECT문의 속성명이 자동으로 사용된다.

CREATE INDEX

  • 인뎃으는 검색을 빠르게 하기 위해 만든 보조적이 ㄴ데이터 구조이며, CREATE INDEX는 인덱스를 저으이하는 명령문
CREATE [UNIQUE] INDEX <인덱스명>
  ON 테이블명({속성명 [ASC | DESC] [, 속성명 [ASC | DESC]]})
  [CLUSTER];
  • UNIQUE
    • 사용된 경우: 중복 값이 없는 속성으로 인덱스를 생성
    • 생략된 경우: 중복 값을 허용하는 속성으로 인덱스를 생성
  • 정렬 여부 지정
    • ASC: 오름차순
    • DESC: 내림차순
    • 생략된 경우: 오름차순
  • CLUSTER: 지정된 키에 따라 튜플들을 그룹으로 지정하기 위해 사용

CREATE TRIGGER

  • 트리거는 데이터 베이스 시스템에서 데이터의 입력, 갱신, 삭제 등의 이벤트가 발생할 때마다 자동적으로 수행되는 사용자 정의 프로시저
  • SQL의 제약조건 방법을 통해 명시할 수 없는 무결성 제약조건을 구현하고, 관련 테이블의 데이터를 일치시킬 때 주로 사용
CREATE TRIGGER 트리거명 [동작시기 옵션][동작 옵션] ON 테이블명
REFERENCING [NEW | OLD] TABLE AS 테이블명
FOR EACH ROW
WHEN 조건식
트리거 BODY
  • 동작시기 옵션: 트리거가 실행될 때를 지정
    • AFTER: 테이블이 변경된 후에 트리거 실행
    • BEFORE: 테이블이 변경되기 전에 트리거 실행
  • 동작 옵션: 트리거가 실행되게 할 작업의 종류 지정
    • INSERT: 테이블에 새로운 레코드를 삽입될 때 트리거 실행
    • DELETE: 테이블의 레코드를 삭제할 때 트리거 실행
    • UPDATE: 테이블의 레코드를 수정할 때 트리거 실행
  • 테이블 선택 옵션: 트리거가 적용될 테이블의 종류를 지정
    • NEW: 새로 추가되거나 변경에 참여할 튜플들의 집합(테이블)에 트리거가 적용
    • OLD: 변경된 튜플들의 집합(테이블)에 트리거가 적용
  • WHEN: 트리거가 실행되면서 지켜야할 조건을 지정
  • 트리거 BODY: 트리거의 본문 코드를 입력하는 부분
    • BEGIN으로 시작해서 END로 끝나는데, 적어도 하나 이상의 SQL문이 있어야 한다. 아니면 오류 발생
    • 변수에 값을 치환할 때는 예약어 SET 사용

ALTER TABLE

  • 테이블에 대한 정의를 변경하는 명령문
ALTER TABLE 테이블명 ADD 속성명 데이터_타입 [DEFAULT '기본값'];
ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT '기본값'];
ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE];
  • ADD: 새로운 속성 추가
  • ALTER: 속성의 기본값을 변경
  • DROP COLUMN: 속성 제거

DROP

  • 스키마, 도메인, 테이블, 뷰, 인덱스, 트리거를 제거하는 명령문
DROP SCHEMA 스키마명 [CASCADE | RESTRICT];
DROP DOMAIN 도메인명 [CASCADE | RESTRICT];
DROP TABLE 테이블명 [CASCADE | RESTRICT];
DROP VIEW 뷰명 [CASCADE | RESTRICT];
DROP INDEX 인덱스명 [CASCADE | RESTRICT];
DROP TRIGGER 트리거명 [CASCADE | RESTRICT];
DROP CONSTRAINT 제약조건명;
  • CASCADE: 제거할 개체를 참조하는 다른 모든 개체를 함께 제거
  • RESTRICT: 다른 개체가 제거할 개체를 참조중일 경우 제거가 취소
DDL Data Definition Language 데이터 정의어 CREATE ALTER DROP