본문 바로가기
개발 및 알고리즘/개발

[SQL] Cascade: 참조 무결성을 지키기 위한 방법

by 0xseo 2024. 6. 28.
반응형

관계형 데이터베이스를 사용하다 보면 FK, 다른 테이블의 값을 그대로 저장하는 참조형 키를 사용하는 경우가 많다.

 

한 테이블의 PK를 참조하는 FK가 있을 경우, 해당 PK를 수정/삭제하여 그 값을 받아오던 FK가 갈 곳을 잃는 사태를 방지하기 위해 FK가 참조하는 키는 수정/삭제가 불가능하다. 참조 무결성을 위반한다는 에러가 발생하기 때문이다.

 

해당 키를 수정/삭제하기 위한 방법은 크게 2가지가 있다.

 

  1. 참조하는 FK의 값을 삭제하여 연결을 끊은 후 해당 키를 삭제한다.
  2. CASCADE를 활용한다.

 

1의 경우 어떤 FK가 해당 키를 참조하고 있는지 전부 알고 꼼꼼히 지워야 하고, 혹시라도 FK에 not null 조건이 걸려 있으면 이조차도 불가능하다는 단점이 있다.

이때 사용하는 것이 CASCADE 옵션이다.

 

1) ON UPDATE CASCADE

Update cascade의 경우 PK 값이 변경되면 해당 키를 참조하고 있던 FK들의 값도 전부 자동으로 바뀐다. 참조 무결성을 지킬 수 있다.

 

2) ON DELETE CASCADE

Delete cascade의 경우 PK 값이 삭제되면 해당 키를 참조하고 있던 FK를 가진 row를 전부 삭제한다. 참조 무결성을 지킬 수 있다.

 

3) ON DELETE SET NULL

Delete cascade를 사용하면 원하지 않던 삭제가 발생할 수 있다. Row를 전부 삭제하고 싶은 게 아니라, 참조만 끊고 싶다면 이 옵션을 사용할 수 있다. On delete set null의 경우 PK 값이 삭제되면 해당 키를 참조하고 있던 FK의 값을 null로 변경한다.

반응형