DBAtlas · 데이터베이스 운영 아틀라스

1785: Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths (FOREIGN KEY 제약 조건이 순환 또는 다중 cascade 경로를 만들 수 있음)

SQL Server

의미

추가하려는 외래 키가 cascade(ON DELETE/UPDATE CASCADE) 작업에서 순환이나 같은 테이블로 향하는 다중 cascade 삭제/갱신 경로를 만들 수 있다. SQL Server는 모호한 cascade 동작을 피하기 위해 이를 거부한다.

원인

cascade 동작이 있는 FK가 테이블 간 순환 참조(A->B->A)나 한 테이블로 향하는 다중 cascade 경로를 만드는 경우다. SQL Server는 모호한 cascade 순서와 무한 루프를 막기 위해 이를 허용하지 않는다.

해결 방법

외래 키를 ON DELETE NO ACTION / ON UPDATE NO ACTION으로 정의한다(cascade 제거): ALTER TABLE child ADD CONSTRAINT fk ... FOREIGN KEY (...) REFERENCES parent(...) ON DELETE NO ACTION; 필요한 연쇄 삭제는 INSTEAD OF DELETE 트리거로 구현한다: 트리거가 먼저 자식 행을 삭제한 후 부모 행을 삭제한다(예: DELETE c FROM child c JOIN deleted d ON c.parent_id = d.id; DELETE e FROM parent e JOIN deleted d ON e.id = d.id;). AFTER DELETE 트리거는 동작하지 않는다. FK 검사가 트리거보다 먼저 실행되므로 삭제가 오류 547로 거부된다. 데이터 모델의 순환 의존성을 검토한다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목