INSERT 구문과 제약조건

mskimdev·2026년 4월 7일

MySQL

목록 보기
8/20

INSERT와 제약 조건

테이블에 데이터를 넣는 건 INSERT 하나면 된다. 그런데 아무 값이나 다 들어가도 되는 건 아니다. 이름 없는 회원, 중복된 이메일, 음수 가격 — 이런 데이터가 쌓이기 시작하면 DB가 금방 엉망이 된다. 제약 조건(Constraint)은 처음부터 잘못된 데이터가 들어오지 못하게 막는 규칙이다.


INSERT 기본 문법

INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)
VALUES (1,2, ...);

앞서 만든 members 테이블에 데이터를 넣는다면 이렇게 된다.

INSERT INTO members (member_name, email)
VALUES ('김민수', 'kim@email.com');

컬럼 순서와 값 순서가 일치해야 한다. member_idAUTO_INCREMENT라 생략해도 자동으로 채워진다.

여러 행을 한 번에 넣을 때는 VALUES 뒤에 이어 붙이면 된다.

INSERT INTO members (member_name, email)
VALUES ('김민수', 'kim@email.com'),
       ('이지현', 'lee@email.com'),
       ('박준혁', 'park@email.com');

제약 조건

제약 조건은 테이블을 만들 때 컬럼에 붙여두는 규칙이다. 이 규칙을 어기는 INSERT는 DB가 거절한다.

NOT NULL

값이 반드시 있어야 한다. NULL을 허용하지 않는다.

CREATE TABLE members (
    member_id   INT PRIMARY KEY AUTO_INCREMENT,
    member_name VARCHAR(50)  NOT NULL,
    email       VARCHAR(100) NOT NULL
);

member_name 없이 INSERT를 시도하면 오류가 난다.

-- 오류: member_name은 NOT NULL이라 NULL이 들어갈 수 없다
INSERT INTO members (email) VALUES ('kim@email.com');

UNIQUE

같은 값이 두 번 들어올 수 없다. 이메일처럼 중복을 허용하면 안 되는 컬럼에 쓴다.

CREATE TABLE members (
    member_id   INT PRIMARY KEY AUTO_INCREMENT,
    member_name VARCHAR(50)  NOT NULL,
    email       VARCHAR(100) NOT NULL UNIQUE
);
INSERT INTO members (member_name, email) VALUES ('김민수', 'kim@email.com');

-- 오류: email이 UNIQUE인데 이미 동일한 값이 존재한다
INSERT INTO members (member_name, email) VALUES ('김민수2', 'kim@email.com');

PRIMARY KEY도 내부적으로 UNIQUE + NOT NULL이 적용된 것이다.

DEFAULT

값을 넣지 않았을 때 자동으로 들어갈 기본값을 지정한다.

CREATE TABLE members (
    member_id   INT PRIMARY KEY AUTO_INCREMENT,
    member_name VARCHAR(50)  NOT NULL,
    email       VARCHAR(100) NOT NULL UNIQUE,
    is_active   BOOLEAN      DEFAULT TRUE,
    created_at  TIMESTAMP    DEFAULT CURRENT_TIMESTAMP
);

is_active를 생략하고 INSERT하면 자동으로 TRUE가 들어간다. created_at은 INSERT 시각이 자동으로 저장된다.

-- is_active, created_at 생략해도 자동으로 채워진다
INSERT INTO members (member_name, email)
VALUES ('김민수', 'kim@email.com');

CHECK

컬럼에 들어올 수 있는 값의 범위나 조건을 직접 지정한다.

CREATE TABLE products (
    product_id   INT PRIMARY KEY AUTO_INCREMENT,
    product_name VARCHAR(100) NOT NULL,
    price        INT          NOT NULL CHECK (price > 0),
    stock        INT          DEFAULT 0 CHECK (stock >= 0)
);

가격이 0 이하이거나 재고가 음수인 데이터는 INSERT 자체가 안 된다.

-- 오류: price는 0보다 커야 한다
INSERT INTO products (product_name, price) VALUES ('무선 마우스', -1000);

제약 조건 정리

제약 조건역할
NOT NULLNULL 허용 안 함
UNIQUE중복값 허용 안 함
DEFAULT기본값 지정
CHECK값의 조건 지정
PRIMARY KEYNOT NULL + UNIQUE, 행의 고유 식별자

제약 조건은 애플리케이션 코드에서 유효성 검사를 하더라도, DB 레벨에서 한 번 더 걸어두는 게 안전하다. 코드에 버그가 생기거나, 다른 경로로 데이터가 들어오더라도 DB가 최후의 방어선 역할을 한다.


profile
<- 개발 공부하는 나

0개의 댓글