제약조건이란?
데이터의 무결성을 위해 각 컬럼에 생성하는 데이터의 제약 장치
제약조건은 테이블 생성 시 컬럼 추가시, 이미 생성된 컬럼에 제약조건을 정의하거나 추가가 가능하다.
1. PRIMARY KEY(기본키)
- 유일한 식별자로, 중복이 불가능하고
NULL
값을 허용하지 않습니다.
- 특정 컬럼에 기본 키를 설정하면
NOT NULL
속성이 자동으로 부여됩니다. (CTAS로 테이블 복사 시 복사되지 않음)
- 하나의 테이블에 여러 기본 키를 생성할 수 없으며, 하나의 기본 키를 여러 컬럼을 결합하여 생성할 수 있습니다.
- 기본 키 생성 시 자동으로
UNIQUE INDEX
가 생성됩니다.
CREATE TABLE Users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
# 컬럼 추가 시 제약조건 생성
ALTER TABLE 테이블명
ADD 컬럼명 데이터타입 [DEFAULT 기본값][[CONSTRAINT 제약조건명] 제약조건종류];
# 이미 생성된 컬럼에 조건만 추가
ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] 제약조건 종류];
# 제약조건 삭제
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
2. UNIQUE
- 특정 컬럼에 대해 중복된 값을 허용하지 않도록 하는 제약 조건입니다.
NULL
값은 허용됩니다.
CREATE TABLE Users (
id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE
);
3. NOT NULL
- 특정 컬럼이
NULL
값을 가질 수 없도록 설정하는 제약 조건입니다.
- 만들어진 컬럼에 NOT NULL 선언시 제약조건 생성이 아닌 MODIFY 로 해결할 수 있습니다.
CREATE TABLE Users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
ALTER TABLE T1 MODIFY COL12 NOT NULL;
ALTER TABLE T1 MODIFY COL12 CONSTRAINT PROPESSOR_COL_12_NN NOT NULL;
4. FOREIGN KEY
- 외래 키는 테이블 간의 관계를 정의하며, 주로 다대일(1) 관계에서 사용됩니다.
- 외래 키는 N쪽 테이블에 위치하며, 참조되는 테이블의 기본 키를 참조합니다.

사용자가 게시글을 작성할 때, 한 명의 사용자는 여러 게시글을 작성할 수 있습니다.
이는 사용자와 게시글이 1:N 관계에 있다는 것을 의미합니다.
id | username | board.id |
1 | Scott | 1, 2 |
2 | Smith | ㅤ |
3 | Json | 3 |
이와같은 테이블 구조는 옳지않다.
원자성을 위배하기 때문이다. 이와같이 한 컬럼이 여러 값을 가질 수 없다.
id | title | user.id |
1 | 제목1 | 1 |
2 | 제목2 | 1 |
3 | 제목3 | 3 |
FK 를 넣게 되면 Board 테이블에 user.id 가 들어오는 형태가 옳다.
CREATE TABLE Board (
id INT PRIMARY KEY,
title VARCHAR(255),
user_id INT,
FOREIGN KEY (user_id) REFERENCES Users(id)
);
- FOREIGN KEY 옵션 생성 시 정의(수정 X 재생성 O)
ON DELETE CASCADE
: 부모 데이터 삭제 시 자식 데이터도 함께 삭제됩니다.ON DELETE SET NULL
: 부모 데이터 삭제 시 자식 데이터의 참조값이NULL
로 설정됩니다.
5. CHECK
CHECK
제약 조건은 컬럼에 입력되는 데이터에 대해 특정 조건을 설정할 수 있습니다. 예를 들어, 특정 컬럼의 값이 특정 범위 내에 있어야 한다거나 특정 조건을 만족해야 한다는 제약을 설정할 수 있습니다.
CREATE TABLE Employees (
id INT PRIMARY KEY,
age INT CHECK (age >= 18)
);
Share article