공통 규칙

외래키는 부모 기본키 집합 안에 있을 때만 유효합니다.

아래 네 연산은 결국 같은 문제를 만듭니다. 자식이 없는 부모 키를 가리키거나, 부모를 바꿔서 기존 연결을 끊으면 참조 무결성이 깨집니다.

부모 테이블

customers.id = 1

자식 테이블

orders.customer_id = 1

핵심은 값이 같아 보이는지가 아니라, 자식 FK가 실제 부모 PK를 계속 찾을 수 있는가입니다.

자식 쪽 변경

없는 부모를 가리키게 만들면 즉시 위반

자식 행이 입력되거나 FK 값이 수정될 때, 부모에 없는 키를 쓰면 저장 순간부터 잘못된 참조가 됩니다.

INSERT
orders.customer_id = 999

부모에 id = 999가 없으므로 새 주문이 처음부터 연결 대상을 찾지 못합니다.

FK UPDATE
customer_id: 1 -> 999

기존에 맞던 참조를 없는 값으로 바꾸면, 수정 직후 FK가 부모 PK 집합 밖으로 나갑니다.

부모 쪽 변경

부모를 지우거나 바꾸면 자식이 고아가 됨

이번에는 자식 값을 안 건드려도 문제가 생깁니다. 부모 쪽 변화가 기존 FK 연결을 끊기 때문입니다.

DELETE
customers.id = 1 삭제

자식의 customer_id = 1은 그대로 남아, 더 이상 참조할 부모가 없는 고아 참조가 됩니다.

PK UPDATE
customers.id: 1 -> 100

부모 기본키만 바뀌고 자식 FK는 1에 머물러, 원래 연결이 끊어집니다.

요점

네 연산은 모두 “FK가 부모 PK를 더 이상 찾지 못하는 상태”로 수렴합니다. 다음 절의 참조 동작 옵션은 바로 이 끊김을 DBMS가 어떻게 처리할지 정하는 장치입니다.