SQL 데이터 정의 언어(DDL) – 1



데이터 정의 언어(DDL)는 데이터베이스 내의 객체를 생성, 삭제, 변경하는 명령을 의미하며 주로 관리자가 사용하는 명령입니다.

CREATE TABLE

테이블을 생성하기 위해 테이블 이름, 컬럼 이름, 형태, 속성을 지정할때는 CREATE TABLE 명령을 사용합니다. 테이블 생성에는 복수의 컬럼을 지정할 수 있기 때문에 필요한 만큼 기술 합니다. 그리고 필드 에는 NULL 허가 여부를 설정할 수 있는데 NULL을 허가하지 않으려면 NOT NULL, 허가 할려면 NULL 을 컬럼 설정 다음에 기술합니다.

테이블에는 보통(대부분) 행을 구분할 수 있는 Primary Key(PK)라고  불리는 주 키 혹은 기본 키가 존재합니다. 테이블에 기본키가 존재하지 않아도 상관없지만 일반적으로 테이블끼리 상관 관계를 가지고 있는 경우 거의 모든 테이블에 존재하고 있습니다.  PK로 지정하는 컬럼은 NULL을 허용하지 않기 때문에 NOT NULL로 지정되어야 하며 PK가 같은 행을 추가하거나 업데이트할 경우 오류를 발생하게 됩니다.

CREATE TABLE SAMPLE_TABLE
(
PK INT NOT NULL CONSTRAINT pkey PRIMARY KEY,
NAME VARCHAR(20) NOT NULL,
REMARK VARCHAR(50) NULL
)

위 쿼리는 이름이 PK인 컬럼에 제약(CONSTRAINT) pkey에 PRIMARY KEY라고 기본키를 설정하여 SAMPLE_TABLE 이란 테이블을 생성하게 됩니다.

DROP TABLE

테이블을 삭제하고자 할 때는 DROP TABLE 명령을 씁니다.

DROP TABLE SAMPLE_TABLE

DROP TABLE 다음에 삭제하고자하는 테이블 이름을 지정하면 테이블 자체와 관련된 모든 정보를 삭제하게 됩니다. 무엇보다 삭제한 정보는 되살리기 어려우니 저 명령이 필요한 경우에는 신중하게 생각 한 후 실행하여야 합니다.

ALTER TABLE

ALTER TABLE은 테이블의 속성을 변경하기 위한 테이블 수정 명령입니다. 기존 테이블의 컬럼을 추가 혹은 삭제하거나 기본키를 변경할 수 있습니다.

ALTER TABLE SAMPLE_TABLE ADD REG_DT DATETIME

위 쿼리는 SAMPLE_TABLE 테이블의 datetime 형태의 REG_DT 컬럼을 추가하는 쿼리 명령어로 실행하게 되면 NULL로 채워져 있는 REG_DT 컬럼이 생성됩니다. 반대로 삭제하기 위해서는  ADD 대신에 DROP COLUMN을 기술합니다.

ALTER TABLE SAMPLE_TABLE DROP COLUMN REG_DT

마찬가지로 기본키의 설정도 할 수 있는데 앞서 CREATE TABLE할때 기본키를 생성하지 않았다면 다음과 같이 기본키를 추가 할 수 있습니다.

ALTER TABLE SAMPLE_TABLE ADD PK INT CONSTRAINT pkey PRIMARY KEY

외래키도 설정할 수 있습니다. 외래키에서 참조할 외부의 테이블 이름과 컬럼 이름을 REFERENCES 로 지정하고 REFERENCES에 지정할 컬럼은 그 테이블의 키본키로 설정되어 있어야 합니다.

ALTER TABLE SAMPLE_TABLE ADD CONSTRAINT fkey FOREIGN KEY(PK)
REFERENCES VIDEO(NUM)

제약을 삭제하고자 할때는 DROP CONSTRAINT를 사용하여 테이블 수정을 합니다.

ALTER TABLE SAMPLE_TABLE DROP CONSTRAINT pkey

TRUNCATE TABLE

테이블 전체 행을 삭제할 때 TRUNCATE TABLE 명령을 사용합니다. DELETE 명령과는 다르게 로그를 생성하거나 색인처리를 하지 않기 때문에 속도가 빠르다는 장점이 있습니다. 모든 행을 순식간에 삭제하기 때문에 실행전 다시 한번 검토하는 절차가 필요합니다.

TRUNCATE TABLE SAMPLE_TABLE



CREATE INDEX

데이터베이스 인덱스(INDEX)라고 함은 데이터베이스 시스템의 검색해야 될 자료가 많으면 많을 수록 효율적으로 검색할 수 있도록 검색처리 능력을 높일 수 있는 색인기능입니다. 인덱스는 정렬되어 있는 데이터를 탐색하는 2분법 탐색(값을 행의 처음부터 찾는 것이 아닌 중간 값을 조건 값과 비교하여 절반씩 기준잘라서 찾는 방법)으로 기본키는 인덱스의 역할도 하기때문에, 기본키 컬럼에 대해서는 인덱스를 저정할 필요는 없고 WHERE 절에 들어가는 컬럼을 대상으로 하는 것이 좋습니다. 단, 인덱스 컬럼을 너무 많이 지정하게 되면 검색은 빠르지만 INSERT 및 UPDATE는 느려질 수 있기때문에 자주 조건절에 들어갈 컬럼을 선택하는 것이 좋을 것 같습니다.

CRATE INDEX는 인덱스 생성 쿼리 명령문입니다.

CREATE INDEX idx ON SAMPLE_TABLE (NAME, REG_DT)
CREATE UNIQUE INDEX idx ON SAMPLE_TABLE(NAME)

여기서는 인텍스 생성을 위해 CREATE INDEX 뒤에 인덱스 명을 정하고 ON 테이블명 뒤에 인덱스로 지정하고자하는 컬럼들을 기술했으며 그 다음 줄 쿼리는 UNIQUE 옵션을 넣으면 중복이 없는 고유 인덱스가 생성됩니다. 허나, 해당 컬럼에서 중복된 데이터가 있다면 UNIQUE 명령시 오류가 나오게 됩니다.

DROP INDEX

인덱스의 삭제는 DROP INDEX 테이블명.인덱스 이름의 쿼리로 실행할 수 있습니다.

DROP INDEX SAMPLE_TABLE.idx

위 쿼리는 아까 생성한 인덱스를 삭제하는 내용을 담고 있습니다.

CREATE VIEW

뷰(VIEW)는 데이터베이스에서 기존 테이블의 결과를 조회한 내용을 가상 테이블화 시켜서 공간을 절약하고 더욱 빠르게 작업을 수행 할 수 있도록 만든 기능입니다.

CREATE VIEW V_VIDEO AS SELECT NAME,TYPE_NAME FROM VIDEO

CREATE VIEW 문구뒤에 VIEW 이름을 지정하고 AS 뒤에 원본 테이블의 조회 쿼리를 기술합니다. 위 쿼리를 실행하고 SELECT * FROM V_VIDEO를 실행하게 되면 비디오 테이블에 지정했던 컬럼인 비디오 이름과 장르 이름만 조회되는 V_VIDEO 뷰의 내용을 볼 수 있습니다.

sqlddl1

DROP VIEW

마찬가지로 DROP VIEW 삭제할 뷰이름을 지정하여 쿼리를 실행하게되면 대상 뷰의 정보가 삭제됩니다. 하지만 뷰가 참조하고 있는 테이블은 삭제가 되지 않습니다.

DROP VIEW V_VIDEO
SQL 데이터 조작 언어(DML) – 1
SQL 데이터 조작 언어(DML) – 2

댓글 남기기