본문 바로가기

Programming/DataBase

SQL - DDL(Data Define Language)

DDL의 개념

- DDL은 스키마, 도메인, 테이블 , 뷰, 인덱스를 정의하거나 변경 또는 제거할 때 사용하는 언어이다.


- DDL로 정의된 내용은 메타데이터가 되며, 시스템 카탈로그에 저장한다.


* 메타데이터 : 데이터 관리를 위한, 데이터에 대한 데이터를 의미함. 예를 들어 '학번은 숫자 1자리이며 1~4만 저장할 수 있다'라는 데이터는 실제 데이터가 아니고 데이터를 저장하기 위한 데이터 이므로 메타데이터라고 함.


* 시스템 카탈로그 : 시스템 그 자체에 관련이 있는 다양한 객체들에 관한 정보를 포함하는 시스템 데이터 베이스 테이블임.


* 서브 쿼리(SUB QUERY) : 서브쿼리는 조건절에 주어진 질의로서, 상위 질의에 앞서 실행되며 그 검색 결과는 상위 질의의 조건절의 피연산자로 사용된다.


[

Ÿ         DDL의 유형

명령문

기능

CREATE

스키마, 도메인, 테이블, 뷰, 인덱스를 정의한다.

ALTER

테이블에 대한 정의를 변경한다.

DROP

스키마, 도메인, 테이블, 뷰, 인덱스를 제거한다.

 

CREATE TABLE 테이블이름 : 지정한 테이블이름으로 테이블 생성

{속성이름 데이터타입} : 테이블을 구성하는 속성수만큼 속성 이름과 데이터 타입 기록

[NOT NULL] : 테이블 생성 시 특정속성값에 NULL이 없도록 지정할때 사용한다. []에 쌓여있으므로 생략가능하다.

PRIMARY KEY(속성이름) : 테이블에서 기본키 속성 지정에 사용

UNIQUE(속성이름 ) : 대체키 지정시 사용, 속성의 모든값이 고유한 값을 가지도록 지정할 때 사용

FOREIGN KEY(속성이름) REFERENCES 참조테이블(참조테이블의속성이름) : 외래키를 지정할 때 사용

CONSTRAINT 제약조건이름 CHECK(속성이름=범위값) : 테이블을 생성할 때 특정 속성에 대해 속성 값의 범우를 지정할 때 사용

외래키 지정 옵션에 사용되는 것 : [ON DELETE CASCADE | SET NULL | SET DEFAULT | NO ACTION]

ON DELETE : 참조테이블의 튜플이 삭제되면 기본 테이블은 어떤 형태로 대처할지 선택

ON UPDATE : 참조테이블의 튜플이 변경되면 기본 테이블은 어떤 형태로 대처할지 선택

CASCADE : 참조테이블의 튜플에 삭제,변화가 있는 경우 기본 테이블도 같이 연쇄적으로 삭제,변화가 되도록 할때 사용

SET NULL : 참조테이블의 튜플에 삭제,변화가 있는 경우 기본 테이블의 관련된 속성 값을 NULL로 변경

SET DEFAULT: 참조테이블의 튜플에 삭제,변화가 있는 경우 기본 테이블의 관련된 속성 값을 기본값으로 변경

NO ACTION : SET NULL : 참조테이블의 튜플에 삭제,변화가 있는 경우 기본 테이블에 아무런 변화가 없도록 지정


2. CREATE SCHEMA

Ÿ         스키마를 정의하는 명령문

Ÿ         스키마는 하나의 응용(사용자)에 속하는 테이블과 기타 구성 요소 등을 그룹 짓기 위한 것

Ÿ         스키마의 식별을 위한 스키마명과 해당 스키마의 소유권자나 허가권자를 정의

Ÿ         표기 형식

CREATE SCHEMA 스키마_이름 AUTHORIZATION 사용자_ID;

[예제] ID가 홍길동인 사용자의 스키마 대학교를 정의하는 SQL

CREATE SCHEMA 대학교 AUTHORIZATION 홍길동

 

3. CREATE DOMAIN

Ÿ         도메인을 정의하는 명령문

Ÿ         도메인이란 하나의 속성이 취할 수 있는 동일한 타입의 원자 값들의 집합

Ÿ         표기형식

CREATE DOMAIN 도메인명 데이터_타입

     [DEFAULT 기본값]

     [CONSTRAINT VALID-도메인명 CHECK(범위 값)];

Ÿ         데이터 타입SQL에서 지원하는 데이터 타입

Ÿ         기본값: 데이터를 입력하지 않았을 때 자동으로 입력되는 값

[예제] 성별을 ‘남’ 또는 ‘여’와 같은 정해진 한 개의 문자로 표현되는 도메인 SEX를 정의하는 SQL

CREATE DOMAIN SEX CHAR(1) 정의된 도메인은 문자형이고 크기는 1자이다.

        DEFAULT ‘남’ 도메인 SEX를 지정한 속성의 기본값은 ‘남’이다.

CONSTRAINT VALID-SEX CHECK(VALUE IN(‘남’,’여’)); SEX를 지정한 속성에는 ‘남’,’여’ 중 하나의 값만을 저장할 수 있다.

 

4. CREATE TABLE

Ÿ         테이블을 정의하는 명령문

Ÿ         표기형식

CREATE TABLE 테이블명

         (속성명 데이터_타입 [NOT NULL], …

         [PRIMARY KEY (기본키_속성명, …)]

         [UNIQUE (대체키_속성명, …)]

         [FOREIGN KEY (외래키_속성명, …)

               REFERENCES 참조테이블(기본키_속성명, …)]

         [CHECK 조건식]);

Ÿ         기본 테이블에 포함될 모든 속성에 대하여 속성명, 속성의 데이터 타입, NOT NULL을 지정한다.

Ÿ         PRIMARY KEY: 기본키를 구성하는 속성 또는 속성의 집합을 지정한다.

Ÿ         UNIQUE: 대체키로 사용할 속성 또는 속성의 집합을 지정한다.

Ÿ         FOREIGN KEY ~ REFERENCES~: 외래키 속성과 참조 테이블에 관한 정보를 지정한다. 외래키가 지정되면 참조 무결성의 CASCADE 법칙이 적용된다.

Ÿ         CHECK: 속성값에 대한 제약 사항을 지정한다.

 

[예제] 이름, 학번, 전공, 성별, 생년월일로 구성된 <학생> 테이블을 정의하는 SQL 문을 작성해 보자. 단, 이름은 NULL이 올 수 없고, 학번은 기본키로, 전공은 <학과> 테이블의 학과 코드를 참조하는 외래키로 사용되며, 생년월일은 1980-01-01 이후의 데이터만 저장할 수 있다.

                               CREATE TABLE 학생                                                // (학생) 테이블 생성

                                (이름 VARCHAR(15) NOT NULL,                   // 이름속성 최대15자, NULL 안됨.

                                학번 CHAR(8),                                                   // 학번 속성 문자8자

                                전공 CHAR(5),                                                   // 전공 속성 문자5자

                                성별 GENDER,                                  // 성별 속성은 'GENDER' 도메인을 자료형으로 사용

                                생년월일 DATE,                              // 생년월일 속성은 DATE 자료형

                                PRIMARY KEY(학번),             // 학번 속성을 기본키로 정의

                                FOREIGN KEY(전공) REFERENCES 학과(학과코드)    

                                              // 전공 속성은 <학과>테이블의  학과코드 속성을 참조하는 외래키

                                ON DELETE SET NULL         // 튜플 삭제시 관련된 모든 튜플의 전공 속성값을 NULL

                                ON UPDATE CASCADE,     // <학과> 테이블에서 학과코드가 변경되면 관련된 모든

                                                                  // 전공 속성의 값도 같은 값으로 변경

                                CONSTRAINT 생년월일제약             // 제약조건의 명은  '생년월일제약'이고,

                                     CHECK(생년월일 >='1900-01-01') );   // 생년월일 속성에는 '1900-01-01'이후 값 허용

 

 소단원 2. CREATE/ALTER/DROP

Side: Create View: 뷰를 정의하는 명령문

Create Index: 인덱스를 정의하는 명령문

Alter Table: 테이블에 대한 정의를 변경하는 명령문
Drop: 스키마, 도메인, 테이블, 뷰, 인덱스를 제거하는 명령문

 

1. CREATE VIEW

Ÿ         뷰는 하나 이상의 테이블로부터 유도되는 이름을 갖는 가상 테이블(Virtual Table)로, CREAT VIEW는 뷰를 정의하는 명령문

Ÿ         표기형식

CREATE VIEW 뷰명[(속성명[, 속성명, …])]

AS SELECT문;

Ÿ         SELECT 문을 서브 쿼리로 사용하여 SELECT 문의 결과로서 뷰를 생성한다.

Ÿ         속성명을 기술하지 않으면, SELECT 문의 속성 명이 자동으로 사용된다.

[예제]고객 테이블에서 주소가 ‘안산시’인 고객들의 성명과 전화번호를 ‘안산고객’이라는 뷰로 정의하시오.

CREATE VIEW 안산고객(성명, 전화번호)

AS SELECT 성명, 전화번호

FROM 고객

WHERE 주소=’안산시’

 

2. CREATE INDEX

Ÿ         인덱스는 검색을 빠르게 하기 위해 만든 보조적인 데이터 구조이며, CREATE INDEX는 인덱스를 정의하는 명령문이다.

Ÿ          표기형식

CREATE[UNIQUE] INDEX <인덱스명>

      ON 테이블명({속성명 [ASCIDESC] [,속성명[ASC | DESC]]})

      [CLUSTER];

Ÿ         UNIQUE

-   사용된 경우: 중복값이 없는 속성으로 인덱스를 생성한다.

-   생략된 경우: 중복값을 허용하는 속성으로 인덱스를 생성한다.

Ÿ         정렬 여부 지정

-   ASC: 오름차순 정렬

-   DESC: 내림차순 정렬

-   생략된 경우: 오름차순으로 정렬됨

Ÿ         CLUSTER: 지정된 키에 따라 튜플들을 그룹으로 저장하기 위해 사용한다.

[예제] <고객> 테이블에서 UNIQUE 한 특성을 갖는 고객번호 속성에 대해 내림차순으로 정렬하여 ‘고객번호_idx’라는 이름으로 인덱스를 정의하시오.

CREATE UNIQUE INDEX 고객번호_idx

      ON 고객(고객번호 DESC);

 

3. ALTER TABLE

Ÿ         테이블에 대한 정의를 변경하는 명령문

Ÿ         표기형식

ALTER TABLE 테이블명 ADD 속성명 데이터_타입[DEFAULT ‘기본값’];

ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT ‘기본값’];

ALTER TABLE 테이블명 DROP 속성명 [CASCADE];

-   ADD: 새로운 속성을 추가한다.

-   ALTER: 속성의 묵시적(Default) 값을 변경한다.

-   DROP: 속성을 제거한다.

[예제] <학생> 테이블에 최대 3문자로 구성되는 학년 속성을 추가하는 SQL 문은 다음과 같다.

ALTER TABLE 학생 ADD 학년 VARCHR(3);

 

4. 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: 인덱스를 제거한다.

-  DROP CONSTRAINT : 제약조건을 제거.

-   CASCADE: 제거를 개체를 참조하는 다른 모든 개체를 함께 제거한다.

-   RESTRICT: 다른 개체가 제거할 개체를 참조 중일 경우 제거가 취소된다.

[예제] <학생> 테이블을 제거하는 SQL 문을 작성하시오. 단, <학생> 테이블을 참조하는 모든 데이터도 함께 제거한다.

DROP TABLE 학생 CASCADE;


'Programming > DataBase' 카테고리의 다른 글

SQL - JOIN  (0) 2013.06.26
sql - select 문  (0) 2013.06.26
관계대수(Relational Algebra)  (0) 2013.06.26
뷰(View)의 개념  (0) 2013.06.26
무결성 (Integrity)  (0) 2013.06.26