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: 다른 개체가 제거할 개체를 참조중일 경우 제거가 취소