검수요청.png검수요청.png

"데이터 정의어"의 두 판 사이의 차이

해시넷
이동: 둘러보기, 검색
잔글
19번째 줄: 19번째 줄:
 
   CONSTRAINT 제약조건명 CHECK(제약조건));
 
   CONSTRAINT 제약조건명 CHECK(제약조건));
  
 +
속성에 들어갈 데이터의 타입을 설정해 줄 수 있다. 각 데이터베이스 관리시스템별로 지원하는 데이터 타입이 있고 지원하지 않는 데이터 타입이 있으니 사용하는 데이터 타입이 지원되는 지 확인하고 사용해야한다.<ref name="테이블 생성"> IT 양햄찌(jhnyang), 〈[https://jhnyang.tistory.com/307 (ORACLE, MYSQL, SQL) CREATE TABLE 테이블 생성하고 주키(기본키)지정하기, 테이블생성법, 제약조건 설정(NOT NULL)]〉, 《티스토리》, 2020-07-19 </ref>
 +
:{|class=wikitable width=700
 +
|+데이터 타입<ref name="테이블 생성"/>
 +
!align=center|데이터 타입
 +
!align=center|의미
 +
|-
 +
|align=center|CHAR
 +
|align=center|특정 문자열 개수를 지정할 때 사용.<br>(보통 글자수가 정해져있을 때, 주민등록번호, 전화번호 등)
 +
|-
 +
|align=center|VARCHAR
 +
|align=center|가변길이의 문자열을 저장할 때 최대 길이를 지정.<br>(글자수가 정해져 있지 않을 때, 이름, 주소 등)
 +
|-
 +
|align=center|VARCHAR2
 +
|align=center|가변길이의 문자열을 저장할 때 최대 길이를 지정, 속성 데이터 길이의 편차가 심할 경우 사용.<br>(MySQL, MariaDB 지원안함)
 +
|-
 +
|align=center|NUMBER
 +
|align=center|숫자에 사용되는 테이터 타입으로 소수점 저장이 가능.<br>(MySQL, MariaDB는 INT로 사용)
 +
|-
 +
|align=center|LONG
 +
|align=center|VARCHAR2와 유사하며 긴 가변길이의 문자를 저장할 때 사용.
 +
|-
 +
|align=center|DATE
 +
|align=center|날짜에 사용되는 데이터 타입.
 +
|}
 +
 +
데이터의 무결성 유지를 위하여 속성의 제약조건을 부여한다. 속성을 기본키와 외래키로 지정해 주거나 속성에 조건을 설정할 수 있다.
 +
:{|class=wikitable width=700
 +
|+제약 조건<ref name="테이블 생성"/>
 +
!align=center|제약조건
 +
!align=center|의미
 +
|-
 +
|align=center|NOT NULL
 +
|align=center|값이 꼭 입력되어야 할 때 사용, NULL을 허용하지 않음.
 +
|-
 +
|align=center|UNIQUE
 +
|align=center|해당 속성에 중복 값을 허용하고 싶지 않을 때 사용.
 +
|-
 +
|align=center|PRIMARY KEY
 +
|align=center|기본키를 지정할 때 사용하는 조건으로 테이블 당 한 개의 기본키만 생성 가능.
 +
|-
 +
|align=center|FOREIGN KEY
 +
|align=center|외래키를 지정할 때 사용. REFERRENCES와 같이 사용하여 참조할 테이블의 속성을 지정해야 함.
 +
|-
 +
|align=center|CHECK
 +
|align=center|속성에 입력되는 데이터를 특정 조건에 맞는 데이터만 입력받고 싶을 때 사용.
 +
|-
 +
|align=center|DEFAULT
 +
|align=center|값이 입력되지 않았을 때 디폴트에 지정된 값(기본 값)으로 입력.
 +
|-
 +
|align=center|INDEX
 +
|align=center|인덱스를 지정할 때 사용.
 +
|}
 +
 +
간단히 예를 들어 적용해보면, '이름','학번', 전공', '성별', '생년월일'로 구성된 학생 테이블을 정의하는 SQL문을 작성한다고 가정한다. 각 속성마다 제약조건과 입력되는 데이터 타입을 확인해주어야 한다. 다음과 같이 속성에 제약조건이 있다고 가정한다.<ref> 1D1C, 〈[https://1d1cblog.tistory.com/95 2020 정보처리기사 필기 - 3.3 SQL 응용(1) ]〉, 《티스토리》, 2020-03-02 </ref>
 +
* '이름'속성은 값은 무조건 존재해야하며 '학번'속성은 기본키로 지정된다.
 +
* '전공'속성은 다른 '학과'테이블의 '학과 코드'라는 속성을 참고하게 되는 외래키로 지정되며 학과 테이블에 삭제가 일어나면 관련 튜플은 NULL값이 되며, 변경이 일어나면 '전공'의 속성도 같이 변경되게 해야 한다.
 +
* '생년월일' 속성은 1980-01-01 이후에 데이터만 입력될 수 있으며, 제약 조건의 이름은 '생년월일 제약'으로 정의한다.
 +
* '성별'속성은 도메인'GANDER'를 사용한다.
 +
 +
CREATE TABLE 학생
 +
  (이름 VARCHAR(15) NOT NULL,
 +
    학번 CHAR(8),
 +
    전공 CHAR(5),
 +
    성별 GANDER,
 +
    생년월일 DATE,
 +
    PRIMARY KEY(학번),
 +
    FOREIGN KEY(전공) REFRRENCES 학과(학과코드)
 +
        ON DELETE SET NULL,
 +
        ON UPDATE CASCADE,
 +
    CONSTRAINT 생년월일제약 CHECK(생년월일>='1980-01-01'));
 +
 +
처음 테이블명에 있어서 생성 규칙이 존재한다. 테이블명은 문자로 시작해야한다. 즉, 숫자가아닌 한글,영어로 시작해야 한다. 테이블명의 길이는 30byte이하여야 되며 특수문자의 사용이 가능하다. 테이블명의 중복은 허용되지 않는다. 이 점들을 잘 기억하여 테이블명을 작성해야한다. 이 후 각 속성을 정의하면 되는데 각 속성명과 데이터 타입을 지정해주게 된다. 이름은 사람마다 글자수가 다르기 때문에 최대 15자리로 제한한 VARCHAR(15)을 사용하는 것을 볼 수 있다. 데이터 타입 지정 후 속성의 조건을 설정하게 되는데 '이름'속성의 값은 무조건 존재해야 하기 때문에 NULL 값이 될 수 없음을 의미한다. 데이터 타입 뒤에 NOT NULL을 사용하게 되면서 설정된다. '성별'속성은 지정된 'GANDER'도메인을 사용하기에 속성명 뒤에 기입하면 된다. 속성의 기본적 정의 후에 기본키, 외래키를 지정해 준다. '학번'속성이 기본키로 지정되었기에 PRIMART KEY(학번)을 기입하면 된다. 외래키는 '전공' 속성이며 '학과'테이블에 있는 '학과코드' 속성을 참조하기에 FOREIGN KEY(전공) REFRRENCES 학과(학과코드)를 기입해준다. 외래키의 참조 조건은 다음과 같다.
 +
:{|class=wikitable width=700
 +
|+외래키 옵션<ref> ehdtnn , 〈[https://ehdtnn.tistory.com/777 외래키, 외래키 옵션]〉, 《티스토리》, 2021-08-12 </ref>
 +
!align=center|조건
 +
!align=center|옵션
 +
!align=center|의미
 +
|-
 +
|align=center rowspan='5'|삭제 시(ON DELETE)
 +
|align=center|CASCADE
 +
|align=center|참조하는 테이블의 속성 데이터 삭제 시 따라 삭제됨.
 +
|-
 +
|align=center|SET NULL
 +
|align=center|참조하는 테이블 속성 데이터 삭제 시 NULL 값으로 변경.
 +
|-
 +
|align=center|SET DEFAULT
 +
|align=center|참조하는 테이블 속성 데이터 삭제 시 기본값으로 변경.
 +
|-
 +
|align=center|NO ACTION
 +
|align=center|RESTRICT과 동일, 옵션을 지정하지 않았을 경우 자동 선택됨.
 +
|-
 +
|align=center|RESTRICT
 +
|align=center|참조하는 테이블이 있을 경우, 데이터 삭제 불가.
 +
|-
 +
|align=center rowspan='5'|변경 시(ON UPDATE)
 +
|align=center|CASCADE
 +
|align=center|참조하는 테이블의 속성 데이터 변경 시 따라 변경됨.
 +
|-
 +
|align=center|SET NULL
 +
|align=center|참조하는 테이블 속성 데이터 변경 시 NULL값으로 변경
 +
|-
 +
|align=center|SET DEFAULT
 +
|align=center|참조하는 테이블 속성 데이터 변경 시 기본값으로 변경
 +
|-
 +
|align=center|NO ACTION
 +
|align=center|RESTRICT과 동일, 옵션을 지정하지 않았을 경우 자동 선택됨.
 +
|-
 +
|align=center|RESTRICT
 +
|align=center|참조하는 테이블이 있을 경우, 데이터 변경 불가
 +
|}
 +
 +
CONSTRAINT문(제약조건문)으로 속성에 조건을 설정할 수 있다. '생년월일'속성의 값 범위를 지정하기 위해 '생년월일 제약'인
 +
제약조건을 만들어 CHECK(생년월일>='1980-01-01')을 사용하여 1980년 1월 1일부터의 값을 넣을 수 있게 된다.
 +
 +
 
===스키마 생성===
 
===스키마 생성===
 
===뷰 생성===
 
===뷰 생성===
44번째 줄: 159번째 줄:
 
* [[drop]]
 
* [[drop]]
  
{{데이터|토막글}}
+
{{데이터|검토 필요}}

2021년 8월 12일 (목) 11:49 판

데이터 정의어(DDL, Data Definition Language)는 새로운 데이터베이스를 구축하기 위해 스키마(schema)를 정의하거나, 기존 스키마의 정의를 삭제 또는 수정하기 위해 사용하는 데이터 언어(data language)로, 새로 만들려는 데이터베이스의 전체적인 구조를 설명하거나, 데이터의 종류와 관계, 이미 정의된 스키마의 구조나 제약조건 등을 변경 또는 삭제하고 싶어 이를 데이터베이스 관리 시스템(database management system, DBMS)에 알릴 때 사용한다. 데이터 정의어로 정의된 스키마는 데이터 사전(Data Dictionary)이라는 특별한 파일에 여러 개의 테이블로서 저장이 된다. 저장되고, 삭제나 수정이 발생하면 이 내용도 데이터 사전에 반영된다. 데이터 사전에 저장된 스키마 정보는 사용자나 데이터베이스 관리 시스템이 필요할 때 참고할 수 있다.[1]

개요

데이터베이스 언어인 DDL, DCL, DML 중 DML 즉, 데이터 정의어는 데이터베이스 내의 객체 생성, 삭제, 변경을 명령을 의미하며 주로 관리자가 사용하는 명령이다. 데이터 정의어는 데이터 조작어와 달리 명령어를 수행하자마자 데이터베이스에 수행한 내용이 바로 반영되는 특성(COMMIT)이 있다. ROLLBACK을 통한 실행취소가 불가능 하기때문에 사용할 때 주의해야 한다. 명령어 중 CREATE, DROP, ALTER, TRUNCATE 등이 있으며 CREATE는 새로운 데이터 베이스 관계, (view), 인덱스(index), 저장 프로시저(stored procedure) 만들기 등을 수행할 수 있다. DROP명령어는 이미 존재하는 데이터 베이스 관계, 뷰, 인덱스, 저장 프로시저를 제거할 수 있고, ALTER는 이미 존재하는 데이터베이스 개체에 대한 변경, 이름 변경의 역할 을 한다. TRUNCATE는 관계에서 데이터를 제거하며 다시 복구할 수 없다.[2][3]

생성

CREATE 문은 관계형 데이터베이스 관리시스템의 관리 하에 객체를 생성하는 데이터 정의 언어(DDL) 명령이다. 사용하는 데이터베이스 관리시스템의 구현을 통해 CREATE 문장으로 만들 수있는 개체의 유형은 다르다. 그러나 대부분의 RDBMS의 구현은 표(테이블), 정의 영역(도메인), 색인(인덱스), 이용자(사용자), 별명(별칭), 저장프로시저 및 데이터베이스 작성을 지원하고 있다.[4]

테이블 생성

테이블을 생성하기 위해 테이블 이름, 속성이름, 속성의 데이터 타입을 지정할 때 CREATE TABLE 명령을 사용한다. 테이블을 생성할 때 여러 속성을 지정할 수 있기 때문에 필요한 만큼 기술할 수 있으며, 필드의 NULL 값의 허가여부, 기본키(primary key)와 그를 참조하는 외래키(Foreign key)의 지정, 속성의 제약조건을 기술할 수 있다. [5]

  • 일반적 테이블 생성문
CREATE TABLE 테이블명 
(속성명 데이터_타입 [제약 조건],
 속성명 데이터_타입 [제약 조건],
 PRIMARY KEY (속성명)
 FOREIGN KEY (속성명) REFERENCES 참조할 테이블명(속성명)
    [ON UPDATE [NO ACTION┃CASCADE┃SET NULL┃SET DEFAULT]]  
    [ON DELETE [NO ACTION┃CASCADE┃SET NULL┃SET DEFAULT]]
 CONSTRAINT 제약조건명 CHECK(제약조건));

속성에 들어갈 데이터의 타입을 설정해 줄 수 있다. 각 데이터베이스 관리시스템별로 지원하는 데이터 타입이 있고 지원하지 않는 데이터 타입이 있으니 사용하는 데이터 타입이 지원되는 지 확인하고 사용해야한다.[6]

데이터 타입[6]
데이터 타입 의미
CHAR 특정 문자열 개수를 지정할 때 사용.
(보통 글자수가 정해져있을 때, 주민등록번호, 전화번호 등)
VARCHAR 가변길이의 문자열을 저장할 때 최대 길이를 지정.
(글자수가 정해져 있지 않을 때, 이름, 주소 등)
VARCHAR2 가변길이의 문자열을 저장할 때 최대 길이를 지정, 속성 데이터 길이의 편차가 심할 경우 사용.
(MySQL, MariaDB 지원안함)
NUMBER 숫자에 사용되는 테이터 타입으로 소수점 저장이 가능.
(MySQL, MariaDB는 INT로 사용)
LONG VARCHAR2와 유사하며 긴 가변길이의 문자를 저장할 때 사용.
DATE 날짜에 사용되는 데이터 타입.

데이터의 무결성 유지를 위하여 속성의 제약조건을 부여한다. 속성을 기본키와 외래키로 지정해 주거나 속성에 조건을 설정할 수 있다.

제약 조건[6]
제약조건 의미
NOT NULL 값이 꼭 입력되어야 할 때 사용, NULL을 허용하지 않음.
UNIQUE 해당 속성에 중복 값을 허용하고 싶지 않을 때 사용.
PRIMARY KEY 기본키를 지정할 때 사용하는 조건으로 테이블 당 한 개의 기본키만 생성 가능.
FOREIGN KEY 외래키를 지정할 때 사용. REFERRENCES와 같이 사용하여 참조할 테이블의 속성을 지정해야 함.
CHECK 속성에 입력되는 데이터를 특정 조건에 맞는 데이터만 입력받고 싶을 때 사용.
DEFAULT 값이 입력되지 않았을 때 디폴트에 지정된 값(기본 값)으로 입력.
INDEX 인덱스를 지정할 때 사용.

간단히 예를 들어 적용해보면, '이름','학번', 전공', '성별', '생년월일'로 구성된 학생 테이블을 정의하는 SQL문을 작성한다고 가정한다. 각 속성마다 제약조건과 입력되는 데이터 타입을 확인해주어야 한다. 다음과 같이 속성에 제약조건이 있다고 가정한다.[7]

  • '이름'속성은 값은 무조건 존재해야하며 '학번'속성은 기본키로 지정된다.
  • '전공'속성은 다른 '학과'테이블의 '학과 코드'라는 속성을 참고하게 되는 외래키로 지정되며 학과 테이블에 삭제가 일어나면 관련 튜플은 NULL값이 되며, 변경이 일어나면 '전공'의 속성도 같이 변경되게 해야 한다.
  • '생년월일' 속성은 1980-01-01 이후에 데이터만 입력될 수 있으며, 제약 조건의 이름은 '생년월일 제약'으로 정의한다.
  • '성별'속성은 도메인'GANDER'를 사용한다.
CREATE TABLE 학생
  (이름 VARCHAR(15) NOT NULL,
   학번 CHAR(8),
   전공 CHAR(5),
   성별 GANDER,
   생년월일 DATE,
   PRIMARY KEY(학번),
   FOREIGN KEY(전공) REFRRENCES 학과(학과코드)
        ON DELETE SET NULL,
        ON UPDATE CASCADE,
   CONSTRAINT 생년월일제약 CHECK(생년월일>='1980-01-01'));

처음 테이블명에 있어서 생성 규칙이 존재한다. 테이블명은 문자로 시작해야한다. 즉, 숫자가아닌 한글,영어로 시작해야 한다. 테이블명의 길이는 30byte이하여야 되며 특수문자의 사용이 가능하다. 테이블명의 중복은 허용되지 않는다. 이 점들을 잘 기억하여 테이블명을 작성해야한다. 이 후 각 속성을 정의하면 되는데 각 속성명과 데이터 타입을 지정해주게 된다. 이름은 사람마다 글자수가 다르기 때문에 최대 15자리로 제한한 VARCHAR(15)을 사용하는 것을 볼 수 있다. 데이터 타입 지정 후 속성의 조건을 설정하게 되는데 '이름'속성의 값은 무조건 존재해야 하기 때문에 NULL 값이 될 수 없음을 의미한다. 데이터 타입 뒤에 NOT NULL을 사용하게 되면서 설정된다. '성별'속성은 지정된 'GANDER'도메인을 사용하기에 속성명 뒤에 기입하면 된다. 속성의 기본적 정의 후에 기본키, 외래키를 지정해 준다. '학번'속성이 기본키로 지정되었기에 PRIMART KEY(학번)을 기입하면 된다. 외래키는 '전공' 속성이며 '학과'테이블에 있는 '학과코드' 속성을 참조하기에 FOREIGN KEY(전공) REFRRENCES 학과(학과코드)를 기입해준다. 외래키의 참조 조건은 다음과 같다.

외래키 옵션[8]
조건 옵션 의미
삭제 시(ON DELETE) CASCADE 참조하는 테이블의 속성 데이터 삭제 시 따라 삭제됨.
SET NULL 참조하는 테이블 속성 데이터 삭제 시 NULL 값으로 변경.
SET DEFAULT 참조하는 테이블 속성 데이터 삭제 시 기본값으로 변경.
NO ACTION RESTRICT과 동일, 옵션을 지정하지 않았을 경우 자동 선택됨.
RESTRICT 참조하는 테이블이 있을 경우, 데이터 삭제 불가.
변경 시(ON UPDATE) CASCADE 참조하는 테이블의 속성 데이터 변경 시 따라 변경됨.
SET NULL 참조하는 테이블 속성 데이터 변경 시 NULL값으로 변경
SET DEFAULT 참조하는 테이블 속성 데이터 변경 시 기본값으로 변경
NO ACTION RESTRICT과 동일, 옵션을 지정하지 않았을 경우 자동 선택됨.
RESTRICT 참조하는 테이블이 있을 경우, 데이터 변경 불가

CONSTRAINT문(제약조건문)으로 속성에 조건을 설정할 수 있다. '생년월일'속성의 값 범위를 지정하기 위해 '생년월일 제약'인 제약조건을 만들어 CHECK(생년월일>='1980-01-01')을 사용하여 1980년 1월 1일부터의 값을 넣을 수 있게 된다.


스키마 생성

뷰 생성

인덱스 생성

도메인 생성

트리거 생성

변경

삭제

각주

  1. 데이터 정의어〉, 《네이버지식백과》
  2. 미니송, 〈데이터베이스 언어(DDL, DML, DCL) - DO의 IT〉, 《티스토리》, 2017-12-05
  3. pridiot, 〈(Oracle) 데이터 정의어 (DDL : Data Definition Language) - pridiot〉, 《티스토리》, 2019-09-29
  4. CREATE (SQL)〉, 《위키백과》
  5. SQL 데이터 정의 언어(DDL) – 1〉, 《helloblog.net》
  6. 6.0 6.1 6.2 IT 양햄찌(jhnyang), 〈(ORACLE, MYSQL, SQL) CREATE TABLE 테이블 생성하고 주키(기본키)지정하기, 테이블생성법, 제약조건 설정(NOT NULL)〉, 《티스토리》, 2020-07-19
  7. 1D1C, 〈2020 정보처리기사 필기 - 3.3 SQL 응용(1) 〉, 《티스토리》, 2020-03-02
  8. ehdtnn , 〈외래키, 외래키 옵션〉, 《티스토리》, 2021-08-12

참고자료

같이 보기


  검수요청.png검수요청.png 이 데이터 정의어 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.