Parent 죽으면 child 어떻게
FK 선언 시 parent row 삭제/업데이트 때 SQLite 가 취하는 참조 동작 명시 가능. 의미 있는 4 옵션:
- NO ACTION (기본) — child orphan 만들면 거부.
- RESTRICT — NO ACTION 과 같은데 더 빨리 enforce (immediate, deferred 아님).
- CASCADE — parent 와 함께 child 도 삭제 (또는 업데이트).
- SET NULL — child 의 FK 컬럼 null 처리. 컬럼이 nullable 이어야 함.
- SET DEFAULT — 컬럼 default 값으로 교체.
Warning: Parent 테이블의
ON DELETE CASCADE 가 statement 한 줄로 거대 sub-tree 날릴 수 있어. 그게 핵심인데 — 동시에 typo DELETE 가 엄청난 피해. 위험 큰 parent 면 NO ACTION + 명시적 cleanup query 가 낫거나, 안전 체크 있는 transaction 으로 감싸.