데이터 베이스/SQL 첫걸음(인프런 강의)

Ch03. 데이터 관리 - 제약 조건 활용

webmaster 2025. 10. 8. 19:12
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