DDL(Data Define Language)

  • DDL(데이터정의어)는 DB의 구조, 데이터형식, 접근 방식 등 DB를 구축하거나 수정할 목적으로 사용하는 언어
  • 결과가 Data Dictionary(데이터 사전)이라는 파일에 여러개의 테이블로 저장된다.

종류

명령어 기능
CREATE SCHEMA, DOMAIN, TABLE, VIEW, INDEX 정의
ALTER TABLE에 대한 정의 변경
DROP SCHEMA, DOMAIN, TABLE, VIEW, INDEX 삭제

CREATE 명령어

객체를 생성하는 명령어

테이블

사용자가 다루는 데이터의 접근 단위로 실제 데이터가 저장되는 공간

테이블 생성

  • 명령어 + 객체
  • 컬럼명, 데이터 타입, 제약조건을 명시
CREATE TABLE 테이블명 (
    [컬럼명 데이터타입 --(필수)
      [NOT NULL|NULL] [DEFAULT 기본값], --(제약사항 선택)
    ...]
    [PRIMARY KEY 컬럼명]
    [UNIQUE 컬럼명]
    [FOREIGN KEY 컬럼명 REFERENCES 테이블명(컬럼명)]
)

제약조건

  • 테이블과 테이블에 저자오디는 데이터를 보다 세밀하게 관리하기위해 사용
  • 테이블 조작시 DBMS는 테이블에 정의된 제약조건의 준수여부를 지속적으로 검사

제약조건의 종류

  • PRIMARY KEY: 기본키를 지정, UNIQUE와 NOT NULL 이 특징
  • FOREIGN KEY: 외래키를 지정, 참조대상의 컬럼을 정의
  • NOT NULL : NULL이 될 수 없는 컬럼에 지정
  • UNIQUE: 동일한 컬럼값을 가질 수 없음을 지정
  • AUTO_INCREMENT: 자동적으로 컬럼값이 1씩 증가되어 입력
  • CHECK: 컬럼값이 특정 조건 준수 여부 지정
  • DEFAULT: 자동으로 지정된 값이 입력되도록 하는 조건
CREATE TABLE 게시판 (
  게시판번호 INT AUTO_INCREMENT PRIMARY KEY,
  제목 VARCHAR(200) NOT NULL UNIQUE,
  작성일 DATETIME NOT NULL,
  조회수 INT DEFAULT 1,
  작성자  CHAR(4) NOT NULL,
  FOREIGN KEY (작성자ID) REFERENCES 사용자(ID)
)


ALTER 명령어

  • 생성된 테이블에 컬럼을 추가, 수정, 삭제하는 명령

테이블 수정방법

  • SQL 구문
  • 네비게이터 패널
ALTER TABLE 테이블병
  [ADD COLUMN 컬럼명 데이터타입
              [NOT NULL | NULL] [DEFAULT 기본값],
  ...]
  [DROP COLUMN 컬럼명, ...]
  [CHANGE COLUMN 수정전컬럼명 수정후컬럼명 데이터타입
                  [NOT NULL | NULL] [DEFAULT 기본값]...]

Q1. 과목테이블에 기본값을 50으로 하는 INT 데이터 타입의 ‘인원제한’ 컬럼을 추가하라.

ALTER TABLE 과목
  ADD COLUMN 인원제한 INT
    DEFAULT 50

Q2. 과목테이블’학점’컬럼의 이름을 ‘이수학점’으로 변경하시오

ALTER TABLE 과목
  CHANGE COLUMN 함점 이수학점 TINYINT
    DEFAULT 3

Q2. 과목테이블의 ‘설명’컬럼을 삭제하시오

ALTER TABLE 과목
  DROP COLUMN 설명


DROP 명령어

  1. 테이블 삭제
  • 존재하는 테이블ㅇ르 스키마에서 삭제
  • 삭제할 테이블의 모든 데이터가 소실(복구 발가)되므로 주의가 필요

삭젝방법

  • SQL 구문
  • 네비게이터 패널 (GUI)

1. CREATE SCHEMA

  • 스키마를 정의
CREATE SCHEMA 스키마명 AUTHORIZATION 사용자_id;
-- '사용자_id' 소유의 스키마 '스키마명'을 정의

2. CREATE DOMAIN

  • 도메인을 정의
CREATE DOMAIN 도메인명 [AS] 데이터_타입
  [DEFAULT 기본값]
  [CONSTRAINT 제약조건명 CHECK (범위값)];
  • [] : 생략가능
  • 데이터 타입 : SQL 에서 지원하는 데이터 타입
  • 기본값 : 데이터를 입력하지 않았을때 자동으로 입력되는 값

3. CREATE TABLE

  • 테이블을 정의
CREATE TABLE 테이블명 (
  속성명 데이터타입 [DEFAULT 기본값] [NOT NULL], -- 기본테이블에 포함될 모든 속성명과 속성의 데이터타입, 기본값, NOT NULL 여부 지정
  [, PRIMARY KEY (기본키_속성명, ...)] -- 기본키로 사용할 속성 지정
  [, UNIQUE (대체키_속성명, ...)] -- 대체키로 사용할 속성 지정(중복값 불가)
  [, FOREIGN KEY (외래키_속성명, ...)]  -- 외래키로 사용할 속성 지정
    REFERENCES 참조테이블 (기본키_속성명, ...)
    [ON DELETE 옵션] -- 참조 테이블의 튜플이 삭제되었을때 기본테이블을 어떻게 할 지 지정
    [ON UPDATE 옵션] -- 참조 테이블의 참조속성값 변경시 기본테이블을 어떻게 할 지 지정
  [, CONSTRAINT 제약조건명 CHECK (조건식)] -- CONSTRAINT는 제약조건의 이름 지정, CHECK는 속성값에 대한 제약조건 정의
);

🔍 [, PRIMARY KEY(…)]에서 [,]의 의미

“이 제약조건은 선택사항(optional)으로, 앞에 쉼표가 올 수도 있다”는 의미이다.
즉, 이 구문이 앞의 컬럼 정의 뒤에 나올 경우 쉼표를 붙여야 함을 암시

4. CREATE VIEW

  • 뷰를 정의
CREATE VIEW 뷰명(속성명[, 속성명, ...])]
AS SELECT;

5. CREATE INDEX

  • 인덱스를 정의하는 명령문

Index

  • 검색시간을 단축하기위해 만든 보조적인 데이터 구조
CREATE [UNIQUE] INDEX 인덱스명
-- UNIQUE 사용시 중복 갑시 없는 속성으로 인덱스 생성

ON 테이블명(속성명 [ASC | DESC] [속성명 [ASC | DESC]])
 -- 생략시 ASC로 정렬

[CLUSTER];
-- 인덱스가 클러스터드 인덱스로 설정

Cluseterd Index

  • 인덱스 키의 순서에따라 데이터가 정렬되는 방식
  • 장점: 데이터가 순서대로 저장되어있어 인덱스를 검색하지 않고도 빠르게 데이터 검색 가능
  • 단점: 데이터 삽입, 삭제시 순서 유지를 위해 데이터 재정렬이 필요

Non Clustered Index

  • 인덱스의 키 값만 정렬(실제 데이터는 정렬되 지 않은 방식)
  • 데이터를 검색하기위해 먼저 인덱스를 검색하여 데이터의 위치를 찾아야함
  • 클러스터드 인덱스에비해 검색 속도가 떨어짐

6. ALTER TABLE

  • 테이블에대한 정의르 변경
ALTER TABLE 테이블명 ADD 속성명 데이터_타입 [DEFAULT '기본값'];
 -- ADD: 새로운 속성(열)을 추가할 때 사용

ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT '기본값'];
-- ALTER: 특정 속성의 DEFAULT 값을 변경할 때 사용

ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE];
-- DROP: 특정 속성을 삭제할때 사용

CASCADE

  • 삭제시 해당 객체에 의존하고 있는 다른 객체들도 함께 삭제되도록 강제로 수행
  • 의도치않은 삭제가 발생할 수 있으므로, 먼저의존성을 확인하고 RESTRICT 상태로 시도하는것이 안전

RESTRICT

  • 삭제시 기본값으로 동작하며, 명시하지않아도 적용된다
  • 삭제 대상이 다른 객체에 의존되고 있다면 삭제를 막음

7. DROP

  • 스키마, 도메인, 기본 테이블, 뷰 테이블, 인덱스, 제약조건 등을 제거하는 명령문
DROP SCHEMA 스키마명 [CASCADE | RESTRICT];
DROP DOMAIN 도메인명 [CASCADE | RESTRICT];
DROP TABLE 테이블명 [CASCADE | RESTRICT];
DROP VIEW 뷰명 [CASCADE | RESTRICT];
DROP INDEX 인덱스명 [CASCADE | RESTRICT];
DROP CONSTRAINT 제약조건명

카테고리:

업데이트:

댓글남기기