데이터 베이스/데이터베이스 기본

Ch08. 데이터 무결성 - 기본 키 제약 조건

webmaster 2026. 6. 8. 19:19

NOT NULL: NULL 방지

  • 역할: 해당 컬럼에 NULL 값(값이 없는 상태)이 저장되는 것을 허용하지 않는다.
    • 반드시 필요한 정보가 누락되는 것을 막는다.
  • 문법 예시: "email VARCHAR(255) NOT NULL"

 

"회원 가입 필수 정보인 이메일을 실수로 "NULL" 입력하려고 시도해 보자.

insert into users(name, email) values('냐옹이', null);

 

  • insert into users(name, email) values('냐옹이', null) Error Code: 1048. Column 'email' cannot be null 0.00076 sec
  • 데이터베이스는 email 컬럼은 NULL 없다는 명확한 에러 메시지를 반환하며, INSERT 명령을 거부한다.

 

UNIQUE : 중복 방지

  • 역할: 해당 컬럼에 들어가는 모든 값은 테이블 내에서 반드시 고유해야(unique) 한다. 중복 데이터가 쌓이는 것을 막는다.
  • 문법 예시: "email VARCHAR(255) UNIQUE"

"이미 가입된 이메일 주소(sean@example.com) 다른 사람이 가입을 시도하는 상황이다.

 

insert into users(name, email, address) values ('가짜 션', 'sean@example.com', '서울시 어딘가');
  • Error Code: 1062. Duplicate entry "sean@example.com" for key "users.email"
  • 데이터베이스는 "sean@example.com"이라는 값이 "users.email" 키에 대해 중복되었다는 에러와 함께 "INSERT" 거부한다.

PRIMARY KEY (기본 ): 행의 대표 식별자

  • 역할: 테이블의 각 행을 고유하게 식별할 수 있는 단 하나의 대표 키. "NOT NULL"과 "UNIQUE" 제약 조건의 특징을 모두 포함한다.
    • 즉, 기본 키 컬럼은 절대 "NULL" 일 수 없으며, 절대 중복될 수 없다.
  • 특징: 테이블당 오직 하나만 설정할 있으며, 기본 키를 기준으로 데이터가 저장되고 검색되므로 성능에도 중요한 역할을 한다.
    • MySQL 기본 키에 자동으로 고성능 인덱스를 생성한다.
  • 문법 예시: "user_id BIGINT PRIMARY KEY"

이미 존재하는 "user_id" "1번"으로 새로운 데이터를 삽입하려고 하거나, "id" "NULL" 삽입하려고 시도해 보자.

insert into users(user_id, name, email) values(1, '누군가','someone@example.com');
  • Error Code: 1062. Duplicate entry '1' for key 'users.PRIMARY'
  • users 테이블의 "user_id"를 "AUTO_INCREMENT" 사용했기 때문에 자동 증가하는 값이기에 "NULL"을 입력해도 값이 자동으로 입력된다.
    • 만약 "AUTO_INCREMENT" 아니라면 PK NULL 입력하면 오류가 발생한다

DEFAULT : 기본값 설정

  • 역할: 특정 컬럼에 값을 명시적으로 입력하지 않았을 경우, 자동으로 설정될 기본값을 지정한다.
    • 엄밀히 말해 무결성을 "강제"하는 규칙이라기보다는, 데이터 누락을 방지하고 입력을 편리하게 해주는 기능에 가깝다.
  • 문법 예시: "status VARCHAR(50) DEFAULT 'PENDING'"

"orders" 테이블에 주문을 추가할 , 주문 상태(status) 따로 지정하지 않으면 기본값인 "PENDING"으로 자동 설정된다.

insert into orders (user_id, product_id, quantity) values(2, 2, 1);
select * from orders order by order_id desc limit 1;

 

쿼리 결과

  • status 컬럼에 우리가 지정한 기본값인 "PENDING"이 자동으로 들어간 것을 확인할 수 있다.