데이터베이스에서 외래키(Foreign Key) 제약조건은 테이블 간의 관계 무결성을 보장하는 핵심 기능입니다.
특히, 부모 테이블의 데이터가 삭제될 때 자식 테이블에서 어떤 처리를 할지를 결정하는 것이 바로 ON DELETE 옵션입니다.
ON DELETE란?
ON DELETE는 부모 테이블(참조되는 테이블)의 레코드가 삭제될 때, 자식 테이블(참조하는 테이블)의 데이터에 어떤 영향을 줄지를 정의하는 제약조건입니다.
즉, 부모 데이터가 없어졌을 때 자식 데이터가 어떻게 반응할지를 정하는 규칙이라고 볼 수 있습니다.
ON DELETE 제약조건 종류
RESTRICT (제한하다)
- 부모 테이블의 행을 삭제하려고 하면, 자식 테이블에서 참조 중이면 삭제를 거부합니다.
- 안전성이 필요한 경우 기본적으로 많이 사용됩니다.
ON DELETE RESTRICT
CASCADE (폭포처럼 연쇄적으로)
- 부모 테이블의 행이 삭제되면, 자식 테이블에서 그 값을 참조하던 행도 자동으로 같이 삭제됩니다.
- 부모 삭제 시 자식도 정리해야 하는 경우 유용합니다.
ON DELETE CASCADE
SET NULL (NULL 값으로 설정)
- 부모 테이블의 행이 삭제되면, 자식 테이블의 외래키 값을 NULL로 변경합니다.
- 단, 자식 테이블의 외래키 컬럼이 NULL을 허용해야 사용 가능합니다.
ON DELETE SET NULL
NO ACTION (아무 동작도 하지 않음)
- MySQL에서는 사실상 RESTRICT와 동일하게 동작합니다.
- 표준 SQL 문법과의 호환성을 위해 존재합니다.
ON DELETE NO ACTION
정리

마무리
- ON DELETE 옵션은 데이터 삭제 시 참조 무결성을 어떻게 유지할지를 결정합니다.
- 단어의 의미 자체를 이해하면 동작을 쉽게 기억할 수 있습니다.
- 안전성이 우선이면 RESTRICT, 연쇄 삭제가 필요하다면 CASCADE, 값만 비워두고 싶을 땐 SET NULL을 사용하면 됩니다.
'컴퓨터 과학 > 데이터 베이스' 카테고리의 다른 글
| 스토어드 프로시저(Stored Procedure)란? (0) | 2025.08.20 |
|---|---|
| Foreign Key: 논리적 vs 물리적 (0) | 2025.08.19 |
| MySQL에서 컬럼 구조 변경하기 (ALTER TABLE 활용) (0) | 2025.08.19 |
| Primary Key와 Unique의 차이 (0) | 2025.08.19 |
| MySQL에서 행의 생성/갱신 시각 관리하기 (0) | 2025.08.19 |