정의어(DDL)는 관계 데이터베이스에서 사용될 테이블, 스키마, 도메인, 인덱스, 뷰 등을 정의(생성)하거나 수정 • 제거 하기 위해 사용되는 언어이다.
정의어에 종류에는 CREATE문, ALTER문, DROP문이 있다.
CREATE
CREATE 명령어는 테이블, 스키마, 도메인, 인덱스, 뷰 등을 정의(생성)하기 위해 사용하는 명령문이다.
①테이블 정의
• 테이블은 CREATE TABLE문에 의해 생성되며, 다음과 같은 구문에 따라 만들어집니다.
•구문
CREATE TABLE 테이블_이름 ({속성_이름 데이터_타입[NOT NULL],} [PRIMARY KEY(속성_이름_),] [UNIQUE(속성_ 이름),] [FOREIGN KEY(속성_이름)REFERENCES 참조테이블_이름(속성_이름)] [ON DELETE CASCADE | SET NULL | SET DEFAULT | NO ACTION] [ON UPDATE CASCADE | SET NULL | SET DEFAULT | NO ACTION], [CONSTRAINT 제약조건_이름 CHECK (속성_이름=범위 값)] ); |
- 구문에서 표현된 '{ }'는 반복, '[ ]'는 생략 가능, ' | ' 는 선택을 의미한다.
- CREATE TABLE 테이블_이름 : 테이블을 만들겠다는 의미이며 '테이블_이름'에는 테이블의 이름을 기입한다.
- [속성_이름 데이터_타입 [NOT NULL]} : 테이블을 구성할 속성 이름과 데이터 타입 등을 기입한다. { }가 반복의 의미이므로 필요 없을 때는 생략한다.
- PRIMARY KEY(속성_이름) : 테이블 생성 시 특정 속성의 값에 중복된 값이 없도록 하며, 즉 모든 속성값이 고유한 값을 가지도록 지정할 때 사용한다.
- FOREIGN KEY (속성_이름) REFERENCES 참조테이블_이름(속성_이름): 외래키를 지정할 때 사용된다.
• FOREIGN KEY (속성_이름): 현재 생성되는 테이블에서 외래키로 사용될 속성 이름을 기입한다.
• 참조테이블_이름(속성_이름): 외래키를 이용해서 참조할 테이블과 기본키로 지정된 속성 이름을 기입한다.
- CONSTRAINT 제약조건_이름 CHECK(속성_이름=범위 값) : 테이블을 생성할 때 특정 속성에 대해 속성값의 범위를 지정할 때 사용된다.
- SQL 정의어, 조작어, 제어어는 시작부터 ~ ';'까지가 하나의 문장이다.
예) 다음 주어진 지시사항에 따라 테이블을 만드는 SQL문을 완성하시오.
<테이블 생성 지시사항>
• 학번, 성명, 학과, 학점으로 구성된 [학생] 테이블을 만들어라. • 학번과 학년은 숫자형 자료이며, 나머지는 문자형이다. • 성명은 가변길이 문자로 최대 25자리로, 학과는 고정길이 문자로 10자리로, 학점은 고정길이 문자로 1자리 문자형이다. • 학번을 기본키로 지정한다. • 성명 속성은 공백이 있을 수 없다. • 학과 속성을 이용하여 [수강] 테이블의 학과를 참조하도록 외래키를 지정하며, 참조 테이블에서 삭제가 발생하면 NULL 값으로 하고, 수정이 발생하면 연쇄적으로 수정하도록 한다. • 학년의 속성값은 4이하의 값을 갖도록 'hak' 이름으로 제약한다. |
<풀이>
CREATE TABLE 학생 ( 학번 INT, 성명 CHAR(5) NOT NULL, 학과 INT, 학년 INT, 학점 CHAR(1), PRIMARY KEY(학번), FOREIGN KEY(학과) REFERENCES 수강(학과) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT hak CHECK(학년 <=4)); |
<결과>
학번 | 성명 | 학과 | 학년 | 학점 |
... | ... | ... | ... | ... |
② 스키마 정의
• 시스템 관리자가 일반 사용자에게 스키마에 대한 권한을 주기 위한 스키마를 만들기 위해 사용한다.
• 스키마는 CREATE SCHEMA 문에 의해 생성되며, 다음과 같은 구문에 따라 만들어진다.
• 구문
CREATE SCHEMA 스키마_이름 AUTHORIZATION 사용자; |
예) 스키마 이름이 'SALLY' 이고, 허가권자가 'LUCAS'인 스키마를 정의하시오.
CREATE SCHEMA SALLY AUTHORIZATION LUCAS; |
③ 도메인 정의
• 한 속성 값의 범위를 지정하기 위한 도메인은 CREATE DOMAIN 문에 의해 생성되며, 다음과 같은 구문에 따라 만들어진다.
• 구문
CREATE DOMAIN 도메인_이름 데이터_타입 [DEFAULT 기본값] [CONSTRAINT 제약조건_이름 CHECK(VALUE IN(범위 값))]; |
예) 속성의 값으로 'T'와 'F'로만 구성되는 'success'라는 이름의 도메인을 정의하시오(단, 속성값이 입력되지 않을 경우 기본값은 'T'로 한다.)
CREATE DOMAIN success CHAR(1) DEFAULT 'T' CONSTRAINT success CHECK (VALUE IN (('T','F')); |
④ 인덱스 정의
• 데이터 베이스 내의 자료를 보다 효율적으로 검색하기 위해 인덱스를 만들며, 시스템에 의해 자동 관리된다.
• 인덱스는 CREATE INDEX문에 의해 생성되며, 다음과 같은 구문에 따라 만들어진다.
• 구문
CREATE [UNIQUE] INDEX 인덱스_이름 ON 테이블_이름(속성_이름 [ASC|DESC]) [CLUSTER]; |
-UNIQUE : 중복을 허용하지 않도록 인덱스를 생성할 때 사용되며, 생략시 중복이 허용된다.
-ON 테이블_이름(속성_이름): 지저된 테이블의 속성으로 인덱스를 만든다.
• [ASC|DESC]:인덱스로 사용될 속성값의 정렬 방법을 나타내며 ASC는 오름차순, DESC는 내림차순을 의미한다.
-CLUSTER : 인접된 튜플들을 물리적인 그룹으로 묶어 저장하도록 할 때 사용된다.
예) [학생] 테이블의 학과 속성값을 오름차순 정렬하여, 중복을 허용하지 않도록 'stud_idx'라는 이름의 인덱스를 정의하시오.
CREATE UNIQUE INDEX stud_idx ON 학생(학과 ASC); |
ALL RIGHTS RESERVED BY 영진닷컴
'정보처리기사' 카테고리의 다른 글
SQL 조작어(DML) - SELECT (단순질의문, DISTINCT) (0) | 2021.07.17 |
---|---|
SQL 정의어 (DDL) - DROP (0) | 2021.07.17 |
SQL 정의어 (DDL) -ALTER (0) | 2021.07.17 |
트랜잭션( Transaction) (0) | 2021.07.13 |
OSI (Open Systems Interconnection) 7계층 (0) | 2021.07.12 |