backend

SQL 테이블 생성 시 제약 조건

KUKJIN LEE
KUKJIN LEE
2026년 1월 18일
6

이번에는 데이터베이스 테이블 생성 시 제약 조건에 대해서 설명 드리겠습니다.

테이블 생성 시 몇 가지 규칙을 더해보려고 합니다. 모든 상품은 반드시 상품명과 상품 코드를 가져야 한다고 가정할 때, 데이터가 비어 있는 상태로 저장되는 것을 방지하기 위해, 필수 값이 필요한 컬럼에 'NOT NULL' 제약 조건을 추가해야 합니다.

CREATE TABLE Products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    productName VARCHAR(100) NOT NULL,
    sku VARCHAR(50) NOT NULL UNIQUE
);

위 코드는 우리가 테이블 생성할 때와 무엇이 다른지 살펴보겠습니다. 이전 글을 모르는 분을 위해 설명하자면 그냥 'NOT NULL' 없었습니다.

CREATE TABLE Products를 할 때

  • 이름(Name): 예) productName
  • 타입(Type): 예) VARCHAR(100) (문자열)
  • 제약 조건(Constraints): 예) NOT NULL, UNIQUE

이러한 제약 조건들을 조합하면 데이터에 대한 복잡한 규칙을 세우고 관리를 자동화 할 수 있습니다.

자동화 기능 추가도 할 수 있습니다.

새로운 상품이 시스템에 등록될 때마다, 일일이 시간을 입력하지 않아도 자동으로 등록 시점이 기록되는 '등록일(registeredAt)' 필드를 추가해 봅시다.

CREATE TABLE Products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    productName VARCHAR(100) NOT NULL,
    sku VARCHAR(50) NOT NULL UNIQUE,
    price INT NOT NULL DEFAULT 0,
    registeredAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

registeredAt 타임스탬프를 추가했습니다. 'DEFAULT' 제약 조건을 활용해 레코드가 생성되는 순간의 현재 시간(CURRENT_TIMESTAMP)이 자동으로 저장되도록 설정했습니다. 또한, 가격(price) 항목에 기본값 0을 설정하여 실수로 가격을 누락하더라도 오류 없이 저장되게 했습니다.

제약 조건을 잘 활용하면 상품 코드의 중복을 막거나 등록 시간을 자동으로 관리하는 등, 데이터의 무결성(Integrity)을 지키는 강력한 도구가 됩니다.  'AUTO_INCREMENT'나 'DEFAULT' 같은 설정을 통해 번거로운 로직은 데이터베이스에 맡기고, 우리는 더 중요한 비즈니스 로직에 집중할 수 있습니다. (무결성에 대해서는 반드시 학습하셔야 합니다. 해당에서는 글을 작성하지 않겠습니다.)

요약하자면

제약 조건 상품 테이블에서의 역할
PRIMARY KEY 각 상품을 구별하는 유일한 ID
AUTO_INCREMENT 상품이 추가 될 때 ID 번호를 1,2,3,.. 순으로 자동 부여
NOT NULL 상품명이나 코드가 빈 칸으로 저장되지 않도록 강제
UNIQUE 상품 코드가 중복되지 않도록 방지
DEFAULT 가격을 입력하지 않으면 0원, 시간은 현재 시각으로 자동 입력
#SQL#테이블 생성#제약 조건