데이터 정의어(Data Definition Language)는 DB 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 데이터 구조와 관련된 명령어들을 말한다.
1. Create문
- 테이블, 뷰, 인덱스 등 객체를 생성하는데 사용
1-1. 스키마
- 하나의 사용자에 속하는 테이블과 기타 구성 요소 등을 그룹짓기 위한 것이다.
ex) Create schema 스키마명 authoriztion 사용자_ID;
1-2. 도메인
- 하나의 속성이 취할 수 있는 동일한 타입의 원자값들의 집합이다.
- 임의의 속성에서 취할 수 있는 값의 범위가 SQL에서 지원하는 전체 데이터
타입의 값이 아니고 일부분일 때, 사용자는 그 값의 범위를 도메인으로 정의할
수 있다.
- 정의된 도메인 명은 일반적인 데이터 타입처럼 사용한다.
ex) Create DOmain 도메인명 데이터_타입
[Default 기본값]
[Constraint 제약조건명 check (범위 값)];
1-3. 테이블
- 기본 테이블에 포함될 모든 속성에 대하여 속성명, 속성의 데이터 타입,
Not Null을 지정한다.
- 제약조건
* PRIMARY KEY (기본키, PK) : 테이블 내의 개별 데이터를 식별하기 위해
정의된 제약조건이다. 이 조건을 설정한 컬럼의 데이터는 컬럼 내에서 중복
될 수 없으며 Null값을 허용하지 않는다. 즉 PK는 Unique + Not Null의 제약
조건을 갖는다.
* FOREIGN KEY (외래키, FK) : 부모 테이블과 자식 테이블 간의 관계를 정의하기
위해 부모 테이블의 PK값을 참조하는 자식 테이블의 제약조건이다.
* UNIQUE KEY (고유키, UK) : 테이블 내의 개별 데이터를 고유하게 식별하기
위한 제약조건이다.
* NOT NULL (NN) : 해당 컬럼의 데이터값에 Null을 허용하지 않는
제약조건이다. 즉 필수입력을 의미한다.
* CHECK (CK) : 해당 컬럼에 허용할 수 있는 데이터 값의 범위를 제한한다.
* On Delete 옵션 : 참조 테이블의 튜플이 삭제되었을 떄 기본 테이블에 취해야
할 사항을 지정한다. 옵션에는 No Action, Cascade, Set Null, Set Default가
있다.
* On Update 옵션 : 참조 테이블의 참조 속성 값이 변경되었을 떄 기본 테이블에
취해야 할 사항을 지정한다. 옵션에는 No Action, Cascade, Set Null, Set
Default가 있다.
ex) Create Table 테이블명
(속성명 데이터_타입 [Not Null], ...
[, Primary key (기본키_속성명, ...)]
[, Unique (대체키_속성명, ...)]
[, Foreign Key (외래키_속성명, ...)
References 참조테이블(기본키_속성명, ...)]
[On delete 옵션]
[On update 옵션]
[, Constraint 제약조건명] [Check (조건식)]);
1-4. 뷰
- 하나 이상의 기본 테이블로 유도되는 이름을 갖는 가상 테이블이다.
- Select문을 서브쿼리로 사용하여 Select문의 결과로서 뷰를 생성한다.
- 서브쿼리인 Select문에는 Union, Order by 절을 사용할 수 없다.
- 속성명을 기술하지 않으면 Select문의 속성명이 자동으로 사용된다.
ex) Create View 뷰명[(속성명 [, 속성명, ...])]
As Select문;
1-5. 인덱스
- 검색을 빠르게 하기 위해 만든 보조적인 데이터 도구이다.
- Unique
* 사용 : 중복 값이 없는 속성으로 인덱스를 생성
* 생략 : 중복 값을 허용하는 속성으로 인덱스 생성
- 정렬 여부 지정
* Asc : 오름차순
* Desc : 내림차숨
* 생략 : 오름차순으로 정렬됨
- Cluster : 지정된 키에 따라 튜플들을 그룹으로 지정하기 위해 사용한다.
ex) Create [Unique] Index 인덱스명
On 테이블명(속성명 [Asc | Desc], ...)
[Cluster]
1-6. 트리거
- DB시스템에서 데이터의 입력, 갱신, 삭제 등의 이벤트가 발생할 때 마다 자동적
으로 수행되는 사용자 정의 프로시저다.
- 동작시기 옵션 : 트리거가 실행될 때를 지정한다. 옵션에는 AFTER와 BEFORE가
있다.
* AFTER : 테이블이 변경된 후 트리거 실행
* BEFORE : 테이블이 변경되기 전에 트리거 실행
- 동작옵션 : 트리거가 실행되게 할 작업의 종류를 지정한다.
* INSERT : 테이블에 새로운 레코드를 삽입할 때 트리거 실행
* DELETE : 테이블의 레코드를 삭제할 때 트리거 실행
* UPDATE : 테이블의 레코드를 수정할 때 트리거 실행
- 테이블 선택 옵션 : 트리거가 적용될 테이블의 종류를 지정한다.
* NEW : 새로 추가되거나 변경에 참여할 튜플들의 테이블에 트리거가 적용
* OLD : 변경될 튜플들의 테이블에 트리거 적용
- WHEN : 트리거가 실행되면서 지켜야할 조건을 지정한다.
- 트리거 BODY : 트리거의 본문 코드를 입력하는 부분이다.
* BEGIN으로 시작해서 END로 끝나는데 적어도 하나 이상의 SQL문이 있어야
한다. 그렇지 않으면 오류가 발생한다.
* 변수에 값을 치환할 때에는 예약어 SET를 사용한다.
ex) Create Trigger 트리거명 [동작 시기 옵션][동작 옵션] On 테이블명
Referencing [New | Old] Table as 테이블명
for Each Row
When 조건식
트리거 Body
2. Alter문
- 테이블에 대한 정의를 변경하는 명령문이다.
ex) Alter Table 테이블명 Add 속성명 데이터_타입 [Default] '기본값]; : 새로운
속성 추가
Alter Table 테이블명 Alter 속성명 [Set Default '기본값']; : 속성의 기본 값을
변경한다.
Alter Table 테이블명 Drop 속성명 [Cascade]; : 속성을 제거한다.
3. Drop문
- 스키마, 도메인, 테이블, 뷰, 인덱스, 트리거를 제거하는 명령문이다.
- Drop Constraint : 제약 조건을 제거한다.
- Cascade : 제거할 개체를 참조하는 다른 모든 개체를 함께 제거한다.
- Restrict : 다른 개체가 제거할 개체를 참조중일 경우 제거가 취소된다.
ex) Drop [Constraint] [제거할 것] 제거할 것 이름 [Cascade | Restrict] ;