RESTRICT
삭제 거부
참조 중인 자식 행이 있으므로 부모 삭제를 막습니다. 부모와 자식 모두 그대로 남습니다.
최종 상태
customers(id=1) 유지 orders(customer_id=1) 유지
부모 행을 지우려는 순간, DBMS는 이 부모를 참조하던 자식 행을 어떻게 정리할지를 `ON DELETE` 옵션으로 결정합니다.
customers(id=1)
orders(id=101, customer_id=1)
질문: orders 행은 그대로 둘까, 같이 지울까, 참조만 끊을까?
핵심은 부모 삭제 자체보다, 자식의 최종 상태가 어떻게 바뀌는지입니다.
참조 중인 자식 행이 있으므로 부모 삭제를 막습니다. 부모와 자식 모두 그대로 남습니다.
customers(id=1) 유지 orders(customer_id=1) 유지
부모를 지우면 그 부모를 가리키던 자식 행도 함께 삭제합니다. 연쇄 삭제가 이어질 수 있습니다.
customers(id=1) 삭제 orders(customer_id=1) 삭제
자식 행은 남기고 외래 키만 `NULL`로 바꿉니다. 관계는 끊기지만 주문 기록 자체는 유지됩니다.
customers(id=1) 삭제 orders(customer_id=NULL) 유지
자식 행은 남기고 외래 키를 기본값으로 바꿉니다. 보통 `미분류` 같은 기본 대상이 미리 준비되어 있어야 합니다.
customers(id=1) 삭제 orders(customer_id=0) 유지