728x90
테이블을 만들 때 설정한 제약 조건(Constraints)은 실수로 혹은 의도적으로 잘못된 데이터가 들어오는 것을 막는 강력한 수문장 역할을 한다. 데이터베이스에 데이터를 저장하거나 변경할 때 이 규칙을 어기면 어떻게 될까? 데이터베이스는 단호하게 입력을 거부하며 오류를 발생시킨다
NOT NULL 제약 조건 위반
insert into customers(email, password, address)
values('noname@example', 'password123', '서울시 마포구');
- 실행 결과: Error Code: 1364. Field 'name' doesn't have a default value
- 데이터베이스는 "name 필드에 기본값이 없다"라는 오류를 반환하며, insert를 거부한다.
- name 열은 not null인데, 값을 주지 않았고, DEFAULT로 지정된 값도 없으므로 어떤 데이터를 넣어야 할지 알 수 없기 때문이다. 이처럼 NOT NULL 제약 조건은 데이터의 완전성을 보장하는 첫 번째 방어선이다.
UNIQUE 제약 조건 위반
insert into customers(name, email, password, address)
values('감강찬','kang@example.com', 'new_password_789', '서울시 송파구');
insert into customers(name, email, password, address)
values('홍길동','kang@example.com', 'new_password_123', '서울시 송파구');
- 실행 결과: Error Code: 1062. Duplicate entry 'kang@example.com' for key 'customers.email'
- 홍길동 회원을 저장할 때 데이터베이스는 "customers.email 키에 중복된 값 kang@example.com이 있습니다"라는 명확한 오류 메시지를 반환하며 INSERT 요청을 거부한다.
- 이처럼 UNIQUE 제약 조건은 데이터의 고유성을 보장하는 중요한 역할을 한다.
외래 키(FK) 제약 조건(관계의 무결성 지키기)
insert into customers(email, password, address)
values('noname@example', 'password123', '서울시 마포구');
insert into products(name, price, stock_quantity)
values('베이직 반팔 티셔츠', 19900, 200);
insert into orders(customer_id, product_id, quantity)
values(1, 1, 1);
- 이 INSERT 문은 성공적으로 실행된다.
- customer_id 1과 product_id 1이 부모 테이블에 모두 존재하기 때문이다.
- order_id와 order_date, status는 각각 AUTO_INCREMENT와 DEFAULT 설정에 따라 자동으로 채워졌다
외래 키(FK) 제약 조건 위반
insert into orders(customer_id, product_id, quantity)
values(999, 1, 1);
- 실행 결과: Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`my_shop`.`orders`, CONSTRAINT `fk_orders_customers` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`customer_id`))
- 데이터베이스는 "자식 행을 추가하거나 업데이트할 수 없습니다: fk_orders_customers 외래 키 제약 조건이 실패했습니다"라는 오류를 뱉어낸다.
- 이 메시지는 orders 테이블에 INSERT 하려던 값 999 가 부모 테이블인 customers의 customer_id에 존재하지 않아서 외래 키 제약조건을 위반했다는 뜻이다.
외래 키 제약 조건은 데이터의 정합성과 무결성을 지키는 핵심 장치다. 이 기능 덕분에 우리는 유령 회원이나 단종된 상품이 주문되는 것과 같은 데이터 불일치 상황을 원천적으로 방지할 수 있다
참고
외래 키 제약조건을 포함한 제약조건들은 INSERT 뿐만 아니라 UPDATE, DELETE 등 모든 상황의 데이터 불일치를 원천 방지한다.
728x90
'데이터 베이스 > SQL 첫걸음(인프런 강의)' 카테고리의 다른 글
| Ch04. 조회와 정렬 - where (0) | 2025.10.17 |
|---|---|
| Ch04. 조회와 정렬 - Select(조회) (0) | 2025.10.13 |
| Ch03. 데이터 관리 - DML(등록, 수정, 삭제) (0) | 2025.10.08 |
| Ch03. 데이터 관리 - DDL(테이블 변경, 제거) (0) | 2025.10.08 |
| Ch03. 데이터 관리 - DDL(테이블 생성) (0) | 2025.10.08 |