-
DDL정보처리기능사/SQL 2018. 11. 9. 16:05
DDL(Data Define Language, 데이터 정의 언어)은 SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 명령문이다.
DDL로 정의된 내용은 Meta-data가 되며, 시스템 카탈로그에 저장한다.
* Meta-data(메타 데이터): 데이터 관리를 위한 데이터, 즉 데이터를 위한 데이터
* 시스템 카탈로그: 시스템 그 자체에 관련이 있는 다양한 객체들에 관한 정보를 포함하는 시스템 데이터베이스 테이블
* 데이터 정의문에서 사용하는 테이블 종류
> 기본 테이블: 이름을 가지고 있으며 독자적으로 존재
> 뷰 테이블: 독자적으로 존재하지 못하고, 기본 테이블로부터 유도된 이름을 가진 가상 테이블
> 임시 테이블: 질의문 처리 결과로 만들어진 테이블로서, 이름을 가지지 않는다.
1. CREATE SCHEMA
- 스키마를 정의하는 명령문
- 스키마의 식별을 위해 스키마 이름과 소유권자나 허가권자를 정의
표기 형식
CREATE SCHEMA 스키마_이름 AUTHORIZATION 사용자_id;
예) 소유권자의 사용자 ID가 홍길동인 스키마 '대학교'의 정의문
CREATE SCHEMA 대학교 AUTHORIZATION 홍길동;
2. CREATE DOMAIN
- 도메인을 정의하는 명령문
- 임의의 애트리뷰트에서 취할 수 있는 원자 값의 범위가 SQL에서 지원하는 data_type에 포함되는 전체 값이 아니고 일부분일 때 사용자가 그 값의 범위를 사용자 정의 data_type으로 정의한다.
표기 형식
CREATE DOMAIN 도메인_이름 data_type
[DEFAULT 묵시값_정의]
[CONSTRAINT VALID-도메인_이름 CHECK(범위값)];
- data_type: SQL에서 지원하는 data_type
- 묵시값: 데이터를 입력하지 않았을 때 자동으로 입력되는 기본값
- 정의된 '도메인_이름'은 일반적인 data_type 처럼 사용한다.
예) '남' 또는 '여'. '?' 중의 한 문자를 취할 수 있는 도메인 SEX의 정의문
CREATE DOMAIN SEX CHAR(1)
DEFAULT '여'
CONSTRAINT VALID-SEX CHECK (VALUE IN ('남', '여', '?'));
정의된 도메인은 문자형이고 크기는 1자이다.
자료형으로 SEX를 지정한 속성의 기본값으로 '여'를 취한다.
자료형으로 SEX를 지정한 속성은 '남', '여', '?' 중에 하나의 값만 취할 수 있다.
* SQL에서 지원하는 기본 data_type
- 정수(Integer): INT(4Byte 정수), SMALLINT(2Byte 정수)
- 실수(Float): FLOAT, REAL, DOUBLE PRECISION
- 형식화된 숫자: DEC(i, j) 단, i: 전체 자릿수, j: 소수부 자릿수
- 고정 길이 문자: CHAR(n) 단, n: 문자 수
- 가변 길이 문자: VARCHAR(n) 단, n: 최대 문자 수
- 고정 길이 비트 열(Bit String): BIT(n), 단, n: 비트 수
- 가변 길이 비트 열: VARBIT(n), 단, n: 최대 비트 수
- 날짜: DATE
- 시간: TIME
3. CREATE TABLE
기본 테이블을 정의하는 명령문이다.
표기 형식
CREATE TABLE 기본테이블_이름
(속성명 data_type [NOT Null], ...,
PRIMARY KEY (기본키_속성명),
UNIQUE (대체키_속성명) ...,
FOREIGN KEY (외래키_속성명, ...)
REFERENCES 참조테이블(기본키_속성명)
CHECK (조건식) );
- 속성명: 기본 테이블에 포함될 모든 속성에 대하여 속성명과 그 속성의 data_type, NOT NULL 여부를 지정
- PRIMARY KEY: 기본키 속성을 지정
- UNIQUE: 대체키로 사용할 속성명들을 지정하는 것으로 UNIQUE로 지정한 속성은 중복된 값을 가질 수 없다.
- FOREIGN KEY ~ REFERENCES ~
> 참조할 다른 테이블과 그 테이블을 참조할 때 사용할 외래키 속성을 지정한다.
> 외래키가 지정되면 참조 무결성의 CASCADE 법칙이 적용된다.
- CHECK: 제약 조건을 정의
* 참조 무결성의 CASCADE 법칙
참조 무결성 제약이 설정된 기본 테이블의 어떤 데이터를 삭제하는 경우, 그 데이터와 밀접하게 연관되어 있는 다른 테이블의 데이터들도 도미노처럼 자동으로 삭제된다. 이러한 법칙을 '계단식', '연속성' 이라는 사전적 의미를 가진 CASCADE 법칙이라 한다.
예) 이름, 학번, 전공, 성별, 생년월일로 구성된 <학생> 테이블을 정의하라.
CREATE TABLE 학생
(이름 VARCHAR(15) NOT NULL,
학번 CHAR(15) NOT NULL,
전공 CHAR(20) NOT NULL,
성별 SEX,
생년월일 DATE,
PRIMARY KEY(학번),
FOREIGN KEY(전공)
REFERENCES 학과(학과코드),
CHECK((성별)='남');
<학생> 테이블을 생성한다.
'이름' 속성은 최대 문자 15자로 NULL 값을 갖지 않는다.
'학번' 속성은 문자 15자로 NULL 값을 갖지 않는다.
'전공' 속성은 문자 20자로 NULL 값을 갖지 않는다.
'성별' 속성은 자료형으로 'SEX' 도메인을 사용한다.
'생년월일' 속성은 DATE 자료형을 갖는다.
;학번' 속성을 기본키로 정의한다.
'전공' 속성은 <학과> 테이블의 '학과코드' 혹성을 참조하는 외래키이다.
'성별' 속성의 값으로는 '남' 만 저장할 수 있다.
* CHAR와 VARCHAR
CHAR은 항상 지정된 크기만큼 기억 장소가 확보된다.
VARCHAR은 기억 장소의 크기가 지정되어도 필드에 저장된 데이터만큼만 기억 장소가 확보된다.
4. CREATE INDEX
인덱스를 정의하는 명령문이다.
표기 형식
CREATE [UNIQUE] INDEX 인덱스_이름
ON 기본테이블_이름({속성_이름 [ASC | DESC,})
[CLUSTER];
- UNIQUE 옵션
> 사용하는 경우: 기본키나 대체키 같은 중복되는 값이 없는 속성으로 인덱스를 생성할 때
> 생략하는 경우: 중복 값을 허용하는 속성으로 인덱스를 생성할 때
- 정렬 여부 지정
- ASC: 오름차순 정렬, DESC: 내림차순 정렬
- 생략하면 오름차순으로 정렬된다.
- CLUSTER 옵션: 동일 인덱스 값을 갖는 튜플들을 그룹으로 묶을 때 사용
예) <고객> 테이블의 기본키인 '고객번호' 속성에 대해 오름차순 정렬하여 '고객번호_INX'라는 이름으로 인덱스를 생성하라.
CREATE UNIQUE INDEX 고객번호_INX
ON 고객(고객번호 ASC);
5. ALTER TABLE
테이블에 대한 정의를 변경하는 명령문
표기 형식
ALTER TABLE 기본테이블_이름 ADD 속성_이름 data_type [DEFAULT '기본값'];
ALTER TABLE 기본테이블_이름 ALTER 속성_이름 [SET DEFAULT '기본값'];
ALTER TABLE 기본테이블_이름 DROP 속성_이름 [CASCADE];
- ADD: 새로운 속성(열)을 추가할 때 사용
- ALTER: 속성의 기본값(Default)을 변경할 때 사용
- DROP: 속성을 삭제할 때 사용
예) <학생> 테이블에 최대 3문자로 구성되는 '학년' 속성을 추가하라.
ALTER TABLE 학생 ADD 학년 VARCHAR(3);
6. DROP
스키마, 도메인, 기본 테이블, 뷰 테이블, 인덱스를 삭제하는 명령문
표기 형식
DROP SCHEMA 스키마_이름 [CASCADE | RESTRICT];
DROP DOMAIN 도메인_이름 [CASCADE | RESTRICT];
DROP TABLE 기본테이블_이름 [CASCADE | RESTRICT];
DROP VIEW 뷰_이름 [CASCADE | RESTRICT];
DROP INDEX 인덱스_이름;
- DROP SCHEMA: 스키마를 삭제
- DROP DOMAIN: 도메인을 삭제
- DROP TABLE: 기본 테이블을 삭제
- DROP VIEW: 뷰 테이블 삭제
- DROP INDEX: 인덱스 삭제
- CASCADE 옵션: 삭제할 요소를 참조하는 다른 모든 개체를 함께 삭제한다. 즉 Main Table의 데이터 삭제 시 각 외래키에 대해 부합되는 모든 데이터를 삭제하는 참조 무결성의 법칙을 설정한다.
- RESTRICT 옵션: 삭제할 요소를 다른 개체가 참조중일 때는 삭제를 취소
예) <학생> 테이블을 삭제하되, <학생> 테이블을 참조하는 모든 테이블을 함께 삭제하라.
DROP TABLE 학생 CASCADE;
'정보처리기능사 > SQL' 카테고리의 다른 글
고급 데이터베이스 기능 (0) 2018.11.12 DML - INSERT, DELETE, UPDATE (0) 2018.11.09 DML - SELECT (0) 2018.11.09 SQL의 개념 (0) 2018.11.09