Post

MySQL : 제약 조건

MySQL 열 옵션과 제약 조건

열 옵션

DEFAULT 옵션

  • 열에 기본값을 설정할 수 있다.
  • 이 옵션은 열 값이 없는 행을 삽입할 경우 열에 널 값이 입력되는 것을 방지한다.
  • 리터럴과 표현식을 기본값으로 사용할 수 있다.
  • 기본 표현식은 해당 열의 데이터 유형과 일치해야 한다.
  • 예제:
    1
    2
    3
    4
    5
    6
    7
    8
    
    CREATE TABLE Department
    (
        deptno TINYINT,
        hiredate DATETIME DEFAULT CURRENT_TIMESTAMP
    );
    
    INSERT INTO Department(deptno, hiredate)
    VALUES(10, DEFAULT);
    

제약 조건 (Constraints)

제약 조건은 테이블 열에 적용되어 데이터 무결성을 유지하는 규칙이다.

특징

  • 잘못된 DML 문 실행을 방지한다.
  • 제약 조건에 대한 정보는 데이터 사전에 저장된다.
  • 필요에 따라 활성화 또는 비활성화할 수 있다.
  • 결과는 즉시 사용자에게 표시된다.
  • 하나의 열에 여러 제약 조건을 적용할 수 있다.
  • 부적절한 데이터 삽입, 수정 및 삭제를 방지한다.
  • 제약 조건은 테이블 레벨이나 열 레벨에서 정의할 수 있다.
  • 종속성이 있는 경우 삭제를 방지한다.
  • 삽입, 수정, 삭제 작업 시 규칙을 적용한다.
  • 제약 조건은 RDBMS마다 다를 수 있다.
  • Oracle에서는 제약 조건 이름을 지정하지 않으면 SYS_Cnumber 형식으로 자동 생성된다.

제약 조건의 종류

  • PRIMARY KEY (PK)
  • FOREIGN KEY (FK)
  • UNIQUE (UK)
  • NOT NULL (NN)
  • CHECK (CK)

제약 조건 생성

열 레벨 제약 조건

1
2
3
4
5
6
CREATE TABLE Student
(
    hakbun CHAR(4) PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    kor TINYINT NOT NULL
);

테이블 레벨 제약 조건

1
2
3
4
5
6
7
CREATE TABLE Student
(
    hakbun CHAR(4),
    name VARCHAR(20) NOT NULL,
    kor TINYINT(3) NOT NULL,
    CONSTRAINT Student_hakbun_pk PRIMARY KEY(hakbun)
);

PRIMARY KEY

  • 테이블의 각 행을 고유하게 식별한다.
  • 하나의 테이블에 하나의 기본 키 제약만 정의할 수 있다.
  • UNIQUE 및 NOT NULL 제약 조건을 결합한다.
  • 자동으로 UNIQUE INDEX를 생성한다.
  • 열 레벨 및 테이블 레벨 모두에서 정의할 수 있다.
  • 예제:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    CREATE TABLE Test
    (
        id NUMBER(3) PRIMARY KEY,
        name VARCHAR2(20)
    );
    
    CREATE TABLE Test1
    (
        id NUMBER(3),
        name VARCHAR2(20),
        CONSTRAINT test1_id_pk PRIMARY KEY(id)
    );
    

FOREIGN KEY

  • 기본 키를 다른 테이블의 외래 키로 복사하여 테이블 간의 관계를 정의한다.
  • 참조하는 테이블(자식 테이블)에서 정의된다.
  • 예제:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    CREATE TABLE dept10
    (
        deptno TINYINT PRIMARY KEY,
        dname VARCHAR(15),
        LOCAL VARCHAR(1)
    );
    
    CREATE TABLE emp10
    (
        empno INT PRIMARY KEY,
        ename VARCHAR(15),
        deptno TINYINT,
        CONSTRAINT FOREIGN KEY(deptno) REFERENCES dept10(deptno)
    );
    

UNIQUE

  • 열 또는 열 집합의 모든 값의 고유성을 보장한다.
  • 하나의 테이블에 여러 개의 UNIQUE 제약 조건을 정의할 수 있다.
  • NULL 값을 허용한다.
  • 자동으로 INDEX를 생성한다.
  • 예제:
    1
    2
    3
    4
    5
    6
    7
    
    CREATE TABLE dept_clone
    (
        deptno SMALLINT,
        dname VARCHAR(20),
        loc VARCHAR(20),
        CONSTRAINT dept_clone_deptno_uk UNIQUE(deptno)
    );
    

NOT NULL

  • 열이 NULL 값을 가질 수 없도록 한다.
  • 열 레벨에서만 정의할 수 있다.
  • 예제:
    1
    2
    3
    4
    5
    6
    7
    8
    
    CREATE TABLE dept_copy1
    (
        deptno SMALLINT,
        dname VARCHAR(20) NOT NULL DEFAULT 'Accounting',
        loc VARCHAR(20),
        CONSTRAINT dept_copy1_deptno_pk PRIMARY KEY(deptno),
        CONSTRAINT dept_copy1_loc_uk UNIQUE(loc)
    );
    

CHECK

  • 각 행이 만족해야 하는 조건을 정의한다.
  • 예제:
    1
    2
    3
    4
    5
    6
    7
    
    CREATE TABLE emp2
    (
        empno INT PRIMARY KEY,
        ename VARCHAR(10) NOT NULL,
        sal DECIMAL(7,2) CHECK(sal BETWEEN 500 AND 5000),
        gender CHAR(1) CHECK(gender IN('M', 'F'))
    );
    

제약 조건 추가 및 삭제

제약 조건 추가

1
2
ALTER TABLE emp1
ADD CONSTRAINT emp1_deptno_fk FOREIGN KEY(deptno) REFERENCES dept(deptno);

제약 조건 삭제

1
2
ALTER TABLE emp_copy
DROP CONSTRAINT emp_copy_ename_uk;
This post is licensed under CC BY 4.0 by the author.

© sseung. Some rights reserved.