티스토리 뷰

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


 ※ 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)
  가변길이 비트열 : VARBIT(n)
  날짜 : DATE, 날짜 데이터는 YYYY-MM-DD의 10자리로 표기
  시간 : TIME, 시간 데이터는 HH:MM:SS의 6자리로 표기

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


 속성명 : 기본 테이블에 포함될 모든 속성에 대하여 속성명과 그 속성의 data_type, NOT NULL[각주:3] 여부를 지정함

 PRIMARY KEY : 기본키 속성을 지정함

 UNIQUE : 대체키로 사용할 속성 명들을 지정함

 FOREIGN KEY ~ REFERENCES ~

  - 참조할 다른 테이블과 그 테이블을 참조할 때 사용할 외래키 속성을 지정함

  - 외래키가 지정되면 참조 무결성의 CASCADE 법칙[각주:4]이 적용됨

 CHECK : 제약 조건을 정의한다


 예제

  - 이름, 학번, 전공, 성별, 생년월일로 구성된 '학생' 테이블을 정의하라


 

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE 학생
(
    이름 VARCHAR(15NOT NULL,
    학번 VARCHAR(15NOT NULL,
    전공 VARCHAR(20NOT NULL,
    성별 SEX,
    생년월일 DATE,
    PRIMARY KEY(학번).
    FOREIGN KEY(전공)
        REFERENCES 학과(학과코드),
    CONSTRAINT 성별제약
        CHECK(성별='남')
);
cs

 '학생' 테이블을 지정한다

 '이름' 속성은 문자 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


  1. 데이터 관리를 위한, 즉 데이터를 위한 데이터 [본문으로]
  2. 시스템 그 자체에 관련이 있는 다양한 객체들에 관한 정보를 포함하는 시스템 데이터베이스 테이블 [본문으로]
  3. NULL이란 모르는 값 또는 적용 할 수 없는 값을 의미하는 것으로, 특정 속성에 데이터 없이 빈 칸으로 있어서는 안 된다는 것을 지시할 때 사용 [본문으로]
  4. 참조 무결성 제약이 설정된 기본 테이블의 어떤 데이터를 삭제하는 경우, 그 데이터와 밀접하게 연관되어 있는 다른 테이블의 데이터들도 도미노처럼 자동으로 삭제된다. 이러한 법칙을 '계단식', '연속성'이라는 사전적 의미를 가진 CASCADE 법칙이라고 한다 [본문으로]
공지사항
최근에 올라온 글
Total
Today
Yesterday