본문 바로가기

CS/데이터베이스

SQL의 DDL문 정리

반응형

 

DDL 문 정리

DDL 이란 데이터 정의어로 간단히 말하면 테이블을 만들고 (CREATE) 삭제하고 (DROP) 수정하는 (ALTER) 역할을 하는 명령어를 말합니다.

 

CREATE 명령어

테이블 또는 도메인을 생성하는 명령어입니다.

CREATE TABLE EMPLOYEE -- 테이블 생성
CREATE DOMAIN SSN_TYPE AS CHAR(9) -- 도메인 생성

 

도메인을 정의하면 동일한 도메인을 갖는다는 것을 좀 더 명시적으로 표현해줄 수 있습니다. 

하지만 시스템에 따라서 사용하지 못하는 경우도 있습니다.

 

[CREATE 명령어 예시]

CREATE TABLE EMPLOYEE
(
    Fname		VARCHAR(15)		NOT NULL,
    Minit		CHAR,
    Lname		VARCHAR(15)		NOT NULL,
    Ssn			CHAR(9)			NOT NULL,
    Bdate		DATE,
    Address		VARCHAR(30),
    Sex			CHAR,
    Salary		DECIMAL(10,2),
    Super_ssn		CHAR(9),
    Dno			INT			NOT NULL,
    PRIMARY KEY(Ssn),
    UNIQUE (Salary),
    FORIGN KEY (Super_ssn) REFERENCES EMPLOYEES(Ssn),
    FORIGN KEY (Dno) REFERENCES DEPARTMENRT(Dnumber)
);

 

 

제약 조건을 명세하는 방법

1. NOT NULL 선언 : null 허용을 막는다.

2. DEFAULT <value> : null이 들어왔을 때 지정해준 value로 값을 지정한다.

3. CHECK 절 : 값의 범위나 제약 조건을 명세한다. 도메인을 선언할 때 사용할 수도 있다.

 

[CHECK 절 사용법]

/*도메인 정의*/
CREATE DOMAIN D_num AS INTEGER
	CHECK (D_num > 0 AND D_num < 21);

 

CREATE TABLE
(
    create_date	DATE,
    start_date	DATE
   
    ...
    CHECK(create_date <= start_date)
);

/* CHECK 절을 사용하면 여러 애트리뷰트에 대해 제약조건을 사용할 수 있다. */

 

 

키에 대한 제약 조건을 주는 방법

1. PRIMARY KEY 절 : PK를 지정해주며 단일 속성이라면 속성을 선언하면서 옆에 쓰는 것도 가능하다.

2. UNIQUE 절 : 속성에서 중복된 값을 막는다.

3. FOREIGN KEY 절 : FK를 지정하며, 다른 테이블과의 관계성을 표현한다.

4. 제약 조건에 이름을 부여하는 것도 가능하다. 이름을 부여하면 나중에 제약 조건을 수정할 수 있다.

 

CONSTRAINT EMPSUPERFK
	FORIGN KEY (Super_ssn) REFERENCES EMPLOYEE (Ssn)
    	ON DELETE SET NULL ON UPDATE CASCADE

해석: EMPLOYEE 튜플이 삭제됐을 때 참조하고 있던 튜플의 Super_ssn은 null, 업데이트 됐을 때는 같이 바꾼다.

 

* 제약 조건이 위배됐을 때 대응하기 위한 액션을 지정할 수 있다. -> referential triggered action

(ON DELETE와 ON UPDATE에 대해서 SET NULL, CASCADE, SET DEFAULT 3가지 옵션이 있다. )


DROP 명령어

테이블이나 스키마를 지우는 명령어입니다. 명령어 뒤에 옵션을 주기도 합니다.

 

RESTRICT : 다른 테이블에 참조되고 있는 경우에는 지울 수 없다.

CASCADE : 상관없이 지워버린다.

 

DROP TABLE DEPENDENT CASCADE;
DROP SCHEMA COMPANY CASCADE;

ALTER 명령어

기존 테이블에 컬럼을 추가, 삭제, 정의 변경, 제약조건 추가 또는 변경할 때 사용하는 명령어입니다.

/* 속성 추가 */
ALTER TABLE EMPLOYEE ADD Job VARCHAR(12);

/* 속성 삭제 */
ALTER TABLE EMPLOYEE DROP Address CASCADE;

/* 속성 정의 삭제 */
ALTER TABLE DEPARTMENT ALTER Mgr_ssn DROP DEFAULT;

/* 속성 정의 추가 */
ALTER TABLE DEPARTMENT ALTER Mgr_ssn SET DEFAULT "33333333";

/* 제약 조건을 삭제 */
ALTER TABLE EMPLOYEE DROP CONSTRAINT EMPSUPERFK CASCADE;
반응형