개발로그필름

[SQL] ON DELETE RESTRICT 본문

IT/SQL

[SQL] ON DELETE RESTRICT

yuullog 2025. 3. 12. 16:08
728x90
반응형
SMALL
SMALL

 

 

 

 

1. ON DELETE RESTRICT란?

  • 부모 테이블의 데이터가 자식 테이블에서 참조되고 있을 때, 부모 데이터를 삭제할 수 없도록 막는 제약 조건
  • 즉, 자식 테이블에 해당 외래 키(FK)를 사용하는 데이터가 존재하면 부모 테이블의 데이터를 삭제하려고 할 때 오류가 발생
  • 이 제약 조건은 데이터 무결성을 유지하는 데 중요한 역할을 한다
  • 실수로 부모 데이터를 삭제하여 자식 테이블에 고아 데이터(orphan data)가 남지 않도록 방지한다

 

 

 

반응형

 

 

 

2. ON DELETE RESTRICT 사용법

📌 테이블 생성 예제

CREATE TABLE parents (
    parent_id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE children (
    child_id INT PRIMARY KEY,
    parent_id INT,
    name VARCHAR(50),
    FOREIGN KEY (parent_id) REFERENCES parents(parent_id) ON DELETE RESTRICT
);

 children 테이블의 parent_id parents(parent_id)를 참조함
 ON DELETE RESTRICT가 설정되어 있어서 부모가 삭제될 경우, 자식 테이블에서 해당 데이터를 참조 중이면 삭제 불가

 

 

 

3. ON DELETE RESTRICT 동작 확인

📌 1) 데이터 삽입

INSERT INTO parents (parent_id, name) VALUES (1, '부모 A');
INSERT INTO children (child_id, parent_id, name) VALUES (101, 1, '자식 A');

✅ 부모 데이터 parent_id = 1이 존재
 children 테이블에서 parent_id = 1을 참조하는 데이터가 존재

 

📌 2) 부모 데이터 삭제 시도

DELETE FROM parents WHERE parent_id = 1;

🚨 실행 결과: 오류 발생!

ERROR: Cannot delete or update a parent row: a foreign key constraint fails

 ON DELETE RESTRICT로 인해 부모 데이터를 삭제할 수 없음 

✔ 부모를 삭제하려면 먼저 자식 테이블에서 해당 데이터를 삭제해야 함

 

 

📌 3) 해결 방법 (자식 데이터 먼저 삭제)

DELETE FROM children WHERE parent_id = 1;
DELETE FROM parents WHERE parent_id = 1;

✅ 자식 데이터를 먼저 삭제하면 부모 데이터 삭제 가능

 

 

 

4. ON DELETE 옵션 비교

옵션 설명 부모 삭제 시 자식 테이블의 동작
ON DELETE RESTRICT 자식이 존재하면 부모 삭제 불가 ❌ 오류 발생
ON DELETE CASCADE 부모 삭제 시 자식도 자동 삭제 ✅ 연쇄 삭제
ON DELETE SET NULL 부모 삭제 시 자식의 FK 값을 NULL로 변경 ✅ FK NULL
ON DELETE NO ACTION RESTRICT와 동일 (MySQL에서는 차이 없음) ❌ 오류 발생
 

 

 

5. ON DELETE RESTRICT 사용할 때

 데이터 무결성을 유지하고 싶을 때 (부모 삭제 시 자식을 보호)
 자식 데이터를 수동으로 관리해야 할 때 (자동 삭제를 원하지 않을 때)
 데이터 삭제가 신중해야 하는 경우 (예: 은행 계좌, 사용자 데이터 등)

 

 

 ON DELETE RESTRICT는 부모 데이터가 자식 테이블에서 참조 중이면 삭제를 막는 기능
 부모 데이터를 삭제하려면 먼저 자식 데이터를 삭제해야 함
 데이터 무결성을 강력하게 유지하는 데 유용하지만, 자동 삭제가 필요할 경우 CASCADE를 고려해야 함

 

반응형
LIST
Comments