일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- css
- macos
- TypeScript
- Android
- wireshark
- node.js
- typeorm
- Crawling
- React
- mysql
- python
- MongoDB
- HTML
- OOAD
- S3
- Express
- sequelize
- AWS
- docker
- OS
- postman
- ubuntu
- Kotlin
- DATABASE
- linux
- Network
- mongoose
- Util
- Scheduling
- algorithm
- Today
- Total
Seongwon Lim
[DB] 데이터 정의어 (DDL) 이란? 본문
서론
이번 글에서는 SQL(Structured Query Language) 을 다룰 때 사용되는 DDL, DML, DCL 중에서 DB를 구축하는 데 사용되는 데이터 정의어(DDL) 대한 개념과 데이터 정의어에 속한 유형을 간단하게 알아보고자 한다.
DDL(Data Define Language, 데이터 정의어)
데이터 정의어는 스키마(SCHEMA), 도메인(DOMAIN), 테이블(TABLE), 뷰(VIEW), 인덱스(INDEX)를 정의하거나 변경, 삭제할 때 사용되는 언어이다. 쉽게 설명하면, DDL은 DB 구조, 데이터 형식 등 DB를 구축, 수정을 위한 목적으로 사용한다.
데이터 정의어는 논리적 데이터 구조와 물리적 데이터 구조의 사상을 정의하며, 데이터베이스 관리자 및 데이터베이스 설계자가 사용한다.
데이터 정의어에 속한 유형은 다음과 같다.
명령어 | 기능 |
CREATE | SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의 |
ALTER | TABLE에 대한 정의를 변경하는 데 사용 |
DROP | SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 삭제 |
1. CREATE SCHEMA
스키마를 정의하는 명령문으로 스키마 이름, 소유권자나 허가권자를 정의한다.
CREATE SCHEMA 스키마명 AUTHORIZATION 사용자_id;
2. CREATE DOMAIN
도메인을 정의하는 명령문으로 정의된 도메인명은 일반적인 데이터 타입처럼 사용할 수 있다.
CREATE DOMAIN 도메인명 [AS] 데이터_타입
[DEFAULT 기본값]
[CONSTRAINT 제약조건명 CHECK (범위값)]
- 도메인 : 하나의 속성이 취할 수 있는 동일한 유형의 원자값들의 집합을 의미한다.
- 데이터 타입 : SQL에서 지원하는 데이터 타입 (INTEGER, VARCHAR 등)
- 기본값 : 데이터를 입력하지 않았을 때 자동으로 입력되는 값
- 대괄호 [] 의 의미는 명령어들이 생략 가능하다는 의미이다.
3. CREATE TABLE
테이블을 정의하는 명령문으로, 기본 테이블에 포함될 모든 속성에 대해 속성명, 속성 데이터 타입, 기본값, NOT NULL 여부를 지정한다.
CREATE TABLE 테이블명
(속성명 데이터_타입 [DEFAULT 기본값] [NOT NULL], ...
[, PRIMARY KEY(기본키_속성명, ...)]
[, UNIQUE(대체키_속성명, ...)]
[, FOREIGN KEY(외래키_속성명, ...)]
[REFERENCES 참조테이블(기본키_속성명, ...)]
[ON DELETE 옵션]
[ON UPDATE 옵션]
[, CONSTRAINT 제약조건명] [CHECK (조건식)];
- PRIMARY KEY : 기본키로 사용할 속성을 지정한다.
- UNIQUE : 대체키로 사용할 속성 또는 속성의 집합을 지정, 중복값을 가질 수 없다.
- FOREIGN KEY ~ REFERENCES ~ : 참조할 다른 테이블과 그 테이블을 참조할 때 사용할 외래키 속성을 지정한다.
- ON DELETE : 참조 테이블 튜플이 삭제되었을 때 기본 테이블이 취해야 할 사항을 지정
- ON UPDATE : 참조 테이블 튜플이 변경되었을 때 기본 테이블이 취해야 할 사항을 지정
- CONSTRAINT : 제약 조건의 이름을 지정한다.
- CHECK : 속성 값에 대한 제약 조건을 정의한다.
4. CREATE VIEW
뷰를 정의하는 명렁문이다.
CREATE VIEW 뷰명[(속성명[, 속성명, ...])]
AS SELECT문;
예를 들어, <고객> 테이블에서 '주소'가 '안산시'인 고객들의 성명, 전화번호를 '안산고개'이라는 뷰로 정의하려면
CREATE VIEW 안산고객(성명, 전화번호)
AS SELECT 성명, 전화번호
FROM 고객
WHERE 주소 = '안산시';
이와 같이 코드를 구성하여 뷰를 생성할 수 있다.
5. CREATE INDEX
인덱스를 정의하는 명령문이다.
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명(속성명 [ASC | DESC] [, 속성명 [ASC | DESC]])
[CLUSTER];
- UNIQUE를 사용하면 중복 값이 없는 속성으로 인덱스를 생성한다.
- 정렬 여부는 ASC(오름차순), DESC(내림차순) 정렬이 있으며 생략 시 오름차순으로 정렬된다.
- CLUSTER : 사용하면 인덱스가 인덱스 키의 순서에 따라 데이터가 정렬되어 저장되는 클러스터드 인덱스로 설정된다.
6. ALTER TABLE
테이블에 대한 정의를 변경하는 명령문이다.
ALTER TABLE 테이블명 ADD 속성명 데이터_타입 [DEFAULT '기본값'];
ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT '기본값'];
ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE];
- ADD : 새로운 속성을 추가할 때 사용
- ALTER : 특정 속성의 기본값을 변경할 때 사용
- DROP COLUMN : 특정 속성을 삭제할 때 사용
7. DROP
스키마, 도메인, 기본 테이블, 뷰 테이블, 인덱스, 제약 조건 등을 제거하는 명령문이다.
DROP SCHEMA 스키마명 [CASCADE | RESTRICT];
DROP DOMAIN 도메인명 [CASCADE | RESTRICT];
DROP TABLE 테이블명 [CASCADE | RESTRICT];
DROP VIEW 뷰명 [CASCADE | RESTRICT];
DROP INDEX 인덱스명 [CASCADE | RESTRICT];
DROP CONSTRAINT 제약조건명;
- CASCADE : 주 테이블의 데이터 제거 시 각 외래키와 관계를 맺고 있는 모든 데이터를 제거한다.
- RESTRICT : 다른 개체가 제거할 요소를 참조하고 있는 경우 제거를 제한한다.
다음 포스팅에서는 데이터 조작어(DML)의 개념과 유형을 살펴볼 예정이다.
'Database' 카테고리의 다른 글
[DB] 트랜잭션(Transaction)의 특성 - ACID (0) | 2022.07.08 |
---|---|
[DB] 데이터 제어어 (DCL) 이란? (0) | 2022.07.06 |
[DB] MySQL 조건문 사용 방법 (0) | 2022.07.04 |
[DB] 데이터 조작어 (DML) 이란? (0) | 2022.07.03 |
[Database] ORM (Object Relational Mapping) 이란? (0) | 2022.05.13 |