티스토리 뷰
DDL의 개요
DDL(Data Define Language, 데이터 정의 언어)은 SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 명령문임
DDL로 정의된 내용은 Meta-data가 되며, 시스템 카탈로그 1에 저장함 2
데이터 정의문에서 사용하는 테이블 종류
기본 테이블 : 이름을 가지고 있으며 독자적으로 존재한다
뷰 테이블 : 독자적으로 존재하지 못하고, 기존 테이블로부터 유도된 이름을 가진 가상 테이블이다
임시 테이블 : 질의문 처리 결과로 만들어진 테이블로서, 이름을 가지지 않는다
CREATE SCHEMA
스키마를 정의하는 명령문
스키마의 식별을 위해 스키마 이름과 소유권자나 허가권자를 정의함
표기 형식
1 | CREATE SHEMA 스키마_이름 AUTHORIZATION 사용자_id; | cs |
예제
- 소유권자의 사용자 ID가 홍길동인 스키마 '대학교'의 정의문
1 | CREATE SHEMA 대학교 AUTHORIZATION 홍길동; | cs |
CREATE DOMAIN
도메인을 정의하는 명령문임
임의이 애트리뷰트에서 취할 수 있는 원자값의 범위가 SQL에서 지워나는 data_type에 포함되는 전체 값이 아니고 일부분일 때 사용자가 그 값의 범위를 사용자 정의 data_type으로 정의함
표기 형식
1 2 3 | CREATE DOMAIN 도메인_이름 data_tpe [ DEFAULT 묵시값_정의 ] [ CONSTRAINT VALID-도메인_이름 CHECK ( 범위값 ) ]; | cs |
※ 구문에서 대괄호 [ ] 의 의미
SQL문에서 [ DEFAULT 묵시값_정의 ] 처럼 대괄호로 묶은 명령어들은 생략이 가능하다는 의미
예제
- '남', '여' 또는 '?' 중의 한 문자를 취할 수 있는 도메인 SEX의 정의문
1 2 3 4 | CREATE DOMAIN SEX CHAR(1) -- 정의된 도메인은 이름이 'SEX'이며 문자형이고, 크기는 1자이다 DEFAULT '여' -- 자료형으로 SEX를 지정한 속성의 기본값으로 '여'를 취한다 CONSTRAINT VALID-SEX CHECK (VALUE IN ( '남', '여', '?' ) ); -- 자료형으로 SEX를 지정한 속성은 '남', '여', '?' 중에 하나의 값만 취할 수 있다 | cs |
CREATE TABLE
기본 테이블을 정의하는 명령문
표기 형식
1 2 3 4 5 6 7 8 9 | CREATE TABLE 기본테이블_이름 ( 속성명 data_type [ NOT NULL ], …, PRIMARY KEY(기본키_속성명), UNIQUE(대체키_속성명, …), FOREIGN KEY(외래키_속성명, …) REFERENCES 참조테이블(기본키_속성명), CONSTRAINT 제약조건명 CHECK(조건식) ); | cs |
PRIMARY KEY : 기본키 속성을 지정함
UNIQUE : 대체키로 사용할 속성 명들을 지정함
FOREIGN KEY ~ REFERENCES ~
- 참조할 다른 테이블과 그 테이블을 참조할 때 사용할 외래키 속성을 지정함
- 외래키가 지정되면 참조 무결성의 CASCADE 법칙이 적용됨 4
CHECK : 제약 조건을 정의한다
예제
- 이름, 학번, 전공, 성별, 생년월일로 구성된 '학생' 테이블을 정의하라
|
'학생' 테이블을 지정한다 |
|||
'이름' 속성은 문자 15자로 NULL값을 갖지 않는다 |
||||
'학번' 속성은 문자 15자로 NULL값을 갖지 않는다 |
||||
'전공' 속성은 문자 15자로 NULL값을 갖지 않는다 |
||||
'성별' 속성은 자료형으로 'SEX' 도메인을 사용한다 |
||||
'생년월일 속성은 DATE 자료형을 갖는다 |
||||
'학번'을 기본키로 정의한다 |
||||
'전공'은 '학과' 테이블의 '학과코드' 속성을 참조하는 외래키이다 |
||||
'성별' 속성의 값으로는 '남'만 저장할 수 있게 지정한 제약 조건의 이름은 '성별제약'이다 |
CREATE INDEX
CREATE INDEX는 인덱스를 정의하는 명령문이다
표기 형식
1 2 3 | CREATE [ UNIQUE ] INDEX 인덱스_이름 ON 기본테이블_이름( { 속성_이름 [ ASC | DESC ], } ) [ CLUSTER ]; | cs |
UNIQUE 옵션
- 사용하는 경우 : 기본키나 대체키 같은 중복되는 값이 없는 속성으로 인덱스를 생성할 때
- 생략하는 경우 : 중복 값을 허용하는 속성으로 인덱스를 생성할 때
정렬 여부 지정
- ASC : 오름차순 정렬, DESC : 내림차순 정렬
- 생략하면 오름차순으로 정렬됨
CLUSTER 옵션 : 동일 인덱스 값을 갖는 튜플들을 그룹으로 묶을 때 사용한다
예제
- '고객' 테이블의 기본키인 '고개번호' 속성에 대해 오름차순 정렬하여 '고객번호_INX'라는 이름으로 인덱스를 구성하라
1 2 | CREATE UNIQUE INDEX 고객번호_INX ON 고객(고객번호 ASC); | cs |
ALTER TABLE
ALTER TABLE은 테이블에 대한 정의를 변경하는 명령문이다
표기 형식
1 2 | ALTER TABLE 기본테이블_이름 ADD 속성_이름 data_type [ DEFAULT '기본값' ]; | cs |
1 2 | ALTER TABLE 기본테이블_이름 ALTER 속성_이름 [ SET DEFAULT '기본값' ]; | cs |
1 2 | ALTER TABLE 기본테이블_이름 DROP 속성_이름 [ CASCADE ]; | cs |
ADD : 새로운 속성(열)을 추가할 때 사용함
ALTER : 특정 속성의 Default 값을 변경할 때 사용함
DROP : 특정 속성을 삭제할 때 사용함
예제
- '학생' 테이블에 최대 3문자로 구성되는 '학년' 속성 추가
1 2 | ALTER TABLE 학생 ADD 학년 VARCHAR(3); | cs |
DROP
DROP은 스키마, 도메인, 기본 테이블, 뷰 테이블
표기 형식
1 | DROP SCHEMA 스키마_이름 [ CASCADE | RESTRICTED ]; | cs |
1 | DROP DOMAIN 도메인_이름 [ CASCADE | RESTRICTED ]; | cs |
1 | DROP TABLE 기본테이블_이름 [ CASCADE | RESTRICTED ]; | cs |
1 | DROP VIEW 뷰_이름 [ CASCADE | RESTRICTED ]; | cs |
1 | DROP INDEX 인덱스_이름; | cs |
DROP SCHEMA : 스키마를 삭제함
DROP DOMAIN : 도메인을 삭제함
DROP TABLE : 기본 테이블을 삭제함
DROP VIEW : 뷰 테이블을 삭제함
DROP INDEX : 인덱스를 삭제함
CASCADE 옵션 : 삭제할 요소를 참조하는 다른 모든 개체를 함께 삭제함. 즉, Main Table의 데이터 삭제 시 각 외래키에 대해 부합되는 모든 데이터를 삭제하는 참조 무결성의 법칙을 설정함
RESTRICTED 옵션 : 삭제할 요소를 다른 개체가 참조 중일 때는 삭제를 취소함
예제
- '학생' 테이블을 삭제하되, '학생' 테이블을 참조하는 모든 테이블을 함께 삭제한다
1 | DROP TABLE 학생 CASCADE; | cs |
- 데이터 관리를 위한, 즉 데이터를 위한 데이터 [본문으로]
- 시스템 그 자체에 관련이 있는 다양한 객체들에 관한 정보를 포함하는 시스템 데이터베이스 테이블 [본문으로]
- NULL이란 모르는 값 또는 적용 할 수 없는 값을 의미하는 것으로, 특정 속성에 데이터 없이 빈 칸으로 있어서는 안 된다는 것을 지시할 때 사용 [본문으로]
- 참조 무결성 제약이 설정된 기본 테이블의 어떤 데이터를 삭제하는 경우, 그 데이터와 밀접하게 연관되어 있는 다른 테이블의 데이터들도 도미노처럼 자동으로 삭제된다. 이러한 법칙을 '계단식', '연속성'이라는 사전적 의미를 가진 CASCADE 법칙이라고 한다 [본문으로]