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"이 자동으로 들어간 것을 확인할 수 있다.
'데이터 베이스 > 데이터베이스 기본' 카테고리의 다른 글
| Ch08. 데이터 무결성 - Check 제약 조건 (0) | 2026.06.08 |
|---|---|
| Ch08. 데이터 무결성 - 외래 키 제약 조건 (0) | 2026.06.08 |
| Ch08. 데이터 무결성 - 데이터 무결성이 중요한 이유 (0) | 2026.06.07 |
| Ch07. 인덱스 - 복합 인덱스 정리 (0) | 2026.06.07 |
| Ch07. 인덱스 - 복합 인덱스(3) (0) | 2026.06.07 |