인프런 커뮤니티 질문&답변

Levi님의 프로필 이미지
Levi

작성한 질문수

8시간 완성 SQLD(2과목)

노랭이 102번 문제풀이(외래키 ON DELETE 옵션)

안녕하세요

해결된 질문

작성

·

83

1

delete cascade로 설정된 T와 S테이블에서
T테이블의 C 컬럼이 삭제 되면
S테이블의 C컬럼의 1과 매칭되어서 연쇄 삭제되는건 이해했는데,
S테이블의 B컬럼은 남아있을거라고 생각했었는데, C컬럼을 삭제하면 다른 컬럼(S테이블의 B)도 같이 삭제되나요?

답변 1

1

땃지님의 프로필 이미지
땃지
지식공유자

Levi님, 안녕하세요.

노랭이 102번 문제 문의하신 것 같습니다.

 

ON DELETE Constraint가 CASCADE로 설정되어 있는 경우 삭제된 부모 테이블(T)의 참조하고 있는 자식 테이블(S)의 행이 전부 삭제 되게 됩니다. CASCADE 옵션 자체가 참조하고 있는 모든 데이터를 한번에 없애기 위해 만들어진 것이라 기본 동작이 그렇다는 점을 일단 말씀드리고요!

 

말씀 주신대로 다른 데이터에는 영향을 주지 않고 참조하는 필드 혹은 컬럼에만 영향을 주려면 어떻게 해야 할까요? 두가지 방법이 생각나는데..

 

  1. 참조하는 컬럼(C) 자체를 없앤다.

  2. 참조하는 컬럼(C) 데이터를 NULL로 만든다.

     

     

    1번 처럼 하게 되면 부모 테이블의 일부 데이터만 삭제하는 경우 자식 테이블의 모든 데이터가 영향을 받아 참조 무결성이 깨질 수 있겠죠.

    2번의 경우는 바로 SET NULL Constraint 인 것을 알 수가 있고요.

     

    그런 이유로 행 자체를 삭제하게 되는 것입니다.

     

     

     

     

감사합니다.

Levi님의 프로필 이미지
Levi
질문자

"1번 처럼 하게 되면 부모 테이블의 일부 데이터만 삭제하는 경우 자식 테이블의 모든 데이터가 영향을 받아 참조 무결성이 깨질 수 있겠죠."

위에 부분이 무슨 말씀이신지 조금 상세 설명 부탁드려도 될까요?
S테이블의 컬럼(C)만 제거하면 참조가 끊어지면서 T테이블의 C컬럼에도 문제가 생긴다는 말씀이실까요?

땃지님의 프로필 이미지
땃지
지식공유자

Levi님, 안녕하세요!

 

일부 데이터가 삭제 됐다고 FK 컬럼을 삭제해버리면 참조 값을 갖고 있어야 할 다른 S 테이블의 데이터들도 문제가 생긴다는 의미로 말씀을 드렸던 것입니다.

 

다시 검토해보니 참조 무결성이라는 용어를 제가 잘못 사용했네요. 참조하는(FK) 컬럼이 없어지면 참조 관계가 없어지게 되니까.. 참조 무결성이 깨진다는 설명은 엄밀히는 맞지 않을 수 있다는 생각이 드네요.

데이터베이스에서 이런 ACTION은 없기 때문에 제가 무리한 예시를 들었다는 생각도 듭니다.

 

혼동을 드려 죄송합니다. 의심하고 지적해 주셔서 감사합니다.

시험 잘 치르시고요. 행운을 빕니다. 🍀🍀🍀

Levi님의 프로필 이미지
Levi

작성한 질문수

질문하기