2 분 소요

제약 조건(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 기본값 자동 설정 값이 없을 경우 지정값 사용

질문 정리

  1. PRIMARY KEY와 UNIQUE는 같은가요?
    • 기능은 유사하지만 PRIMARY KEY는 테이블당 1개만, UNIQUE는 여러 개 설정 가능합니다.
  2. NOT NULL과 DEFAULT는 함께 사용할 수 있나요?
    • 가능합니다. 입력값이 없으면 DEFAULT 값이 자동 입력됩니다.
  3. FOREIGN KEY의 ON DELETE 옵션은 꼭 필요하나요?
    • 필수는 아니지만, 참조 데이터 삭제 시 처리 방식을 명확히 하기 위해 사용합니다.
  4. 복합 키란 무엇인가요?
    • 두 개 이상의 필드를 조합하여 고유 식별자로 설정하는 키입니다.
  5. 제약 조건은 테이블 생성 후에도 추가할 수 있나요?
    • 네. ALTER TABLE 문으로 언제든지 추가, 수정, 제거 가능합니다.

카테고리:

업데이트:

댓글남기기