공통 시작 상태
DELETE FROM employees WHERE emp_id = 2;

emp_id = 2인 부장을 지우려 할 때, 이를 참조하던 과장의 manager_id = 2를 DB가 어떻게 처리할지에 따라 결과가 갈린다.

삭제 전 참조 관계
사장 emp_id = 1
부장 emp_id = 2
과장 manager_id = 2
부모 행은 부장, 자식 행은 과장이다.
삭제 차단 참조 무결성을 우선
RESTRICT DELETE 실패
참조 중이면 바로 거부

과장이 아직 manager_id = 2를 가리키므로 부모 삭제가 막힌다.

NO ACTION 결과는 거의 동일
체크 시점만 다르고 최종적으로는 거부

검사가 나중에 일어나더라도 참조가 남아 있으면 삭제는 실패한다.

삭제 허용 자식 행을 어떻게 정리할지 선택
CASCADE 과장 행도 삭제
부모를 지우면 연결된 자식도 함께 사라진다

상위 관리자가 삭제될 때 그를 참조하던 행까지 연쇄적으로 정리한다.

SET NULL 2 → NULL
자식 행은 남기고 참조만 끊는다

과장 행은 유지되지만 manager_id는 비워진다.

SET DEFAULT 2 → DEFAULT
미리 정한 기본값으로 옮긴다

지원되는 DBMS에서만 사용할 수 있으며, 기본 관리자 값이 있어야 의미가 있다.

ON UPDATE도 같은 원리: 부모 키가 2 → 20으로 바뀌면 자식의 manager_id거부 / 같이 변경 / NULL / DEFAULT 중 하나로 처리된다.