SQL 제약 조건 NOT NULL부터 FOREIGN KEY까지 실전 활용법
제약 조건(Constraints)은 SQL에서 데이터의 무결성(일관성과 정확성)을 보장하기 위해 사용되는 핵심 기능입니다. 테이블을 생성하거나 수정할 때 설정하며, 잘 활용하면 잘못된 데이터 입력을 사전에 차단할 수 있습니다. 이 글에서는 주요 제약 조건의 종류와 사용법, 실전 예제까지 체계적으로 정리했습니다.
1. 제약 조건 종류 및 기능
| 제약 조건 | 설명 |
|---|---|
NOT NULL |
필드가 반드시 값을 가져야 함 (NULL 불가) |
UNIQUE |
필드 값이 고유해야 함 (중복 불가) |
PRIMARY KEY |
테이블의 고유 식별자 (UNIQUE + NOT NULL) |
FOREIGN KEY |
다른 테이블의 필드를 참조하여 관계 설정 |
DEFAULT |
값이 없을 때 기본값 자동 입력 |
2. NOT NULL: 값 필수 입력
설명
- 해당 필드는 반드시 값이 있어야 함
- NULL 입력 시 오류 발생
사용 예시
CREATE TABLE
CREATE TABLE Test (
ID INT NOT NULL,
Name VARCHAR(30)
);
ALTER TABLE
ALTER TABLE Reservation
MODIFY COLUMN Name VARCHAR(30) NOT NULL;
3. UNIQUE: 중복 방지
설명
- 값이 반드시 고유해야 함
- 중복값 저장 시 오류 발생
사용 예시
CREATE TABLE
CREATE TABLE Test (
ID INT NOT NULL UNIQUE
);
ALTER TABLE
ALTER TABLE Reservation
ADD CONSTRAINT UNIQUE_Room UNIQUE (RoomNum);
4. PRIMARY KEY: 고유 식별자
설명
- 테이블의 각 레코드를 고유하게 식별
- 한 테이블에 하나만 설정 가능
- 자동으로
NOT NULL + UNIQUE포함
사용 예시
CREATE TABLE
CREATE TABLE Test (
ID INT NOT NULL,
Name VARCHAR(30),
PRIMARY KEY (ID)
);
ALTER TABLE
ALTER TABLE Reservation
ADD PRIMARY KEY (ID);
5. FOREIGN KEY: 테이블 간 관계 설정
설명
- 다른 테이블의 필드와 연결
- 참조 무결성 보장
- 참조 대상 변경/삭제 시 동작 정의 가능
사용 예시
CREATE TABLE
CREATE TABLE Reservation (
ID INT NOT NULL PRIMARY KEY,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customer(ID)
);
ALTER TABLE
ALTER TABLE Reservation
ADD CONSTRAINT FK_Customer
FOREIGN KEY (CustomerID) REFERENCES Customer(ID);
6. DEFAULT: 기본값 설정
설명
- 값이 입력되지 않은 경우 자동으로 기본값 삽입
사용 예시
CREATE TABLE
CREATE TABLE Test (
ID INT NOT NULL,
Status VARCHAR(20) DEFAULT 'Pending'
);
ALTER TABLE
ALTER TABLE Reservation
ADD COLUMN Status VARCHAR(20) DEFAULT 'Pending';
7. 실전 예제
7.1. 복합 PRIMARY KEY
CREATE TABLE RoomReservation (
RoomNum INT NOT NULL,
ReserveDate DATE NOT NULL,
PRIMARY KEY (RoomNum, ReserveDate)
);
✅ RoomNum과 ReserveDate 조합이 고유해야 함
7.2. FOREIGN KEY + CASCADE
CREATE TABLE Orders (
OrderID INT NOT NULL PRIMARY KEY,
CustomerID INT,
FOREIGN KEY (CustomerID) REFERENCES Customer(ID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
- ON DELETE CASCADE: 참조된 고객이 삭제되면 해당 주문도 삭제
- ON UPDATE CASCADE: 고객 ID 변경 시 자동 반영
8. 제약 조건 관리 팁
8.1. 제약 조건 제거
ALTER TABLE Reservation
DROP PRIMARY KEY;
8.2. 제약 조건 이름 지정
ALTER TABLE Reservation
ADD CONSTRAINT UNIQUE_Room UNIQUE (RoomNum);
8.3. 여러 제약 조건 동시 설정
CREATE TABLE Test (
ID INT NOT NULL UNIQUE,
Email VARCHAR(50) UNIQUE,
Status VARCHAR(20) DEFAULT 'Pending'
);
9. 제약 조건 요약 정리표
| 제약 조건 | 기능 | 주요 특징 |
|---|---|---|
NOT NULL |
NULL 허용 안 됨 | 필수 입력 필드 |
UNIQUE |
고유한 값만 허용 | 중복 불가 |
PRIMARY KEY |
테이블 고유 식별자 | 하나만 설정, NOT NULL + UNIQUE 포함 |
FOREIGN KEY |
참조 무결성 유지 | 테이블 간 관계 정의 |
DEFAULT |
기본값 자동 설정 | 값이 없을 경우 지정값 사용 |
질문 정리
- PRIMARY KEY와 UNIQUE는 같은가요?
- 기능은 유사하지만 PRIMARY KEY는 테이블당 1개만, UNIQUE는 여러 개 설정 가능합니다.
- NOT NULL과 DEFAULT는 함께 사용할 수 있나요?
- 가능합니다. 입력값이 없으면 DEFAULT 값이 자동 입력됩니다.
- FOREIGN KEY의 ON DELETE 옵션은 꼭 필요하나요?
- 필수는 아니지만, 참조 데이터 삭제 시 처리 방식을 명확히 하기 위해 사용합니다.
- 복합 키란 무엇인가요?
- 두 개 이상의 필드를 조합하여 고유 식별자로 설정하는 키입니다.
- 제약 조건은 테이블 생성 후에도 추가할 수 있나요?
- 네.
ALTER TABLE문으로 언제든지 추가, 수정, 제거 가능합니다.
- 네.
댓글남기기