DB에서 데이터의 일관성을 유지하기 위한 조건이며,
SQL 명령어 중에선 이를 관리하고 지원하는 명령어가 존재한다.
기본키(PK)와 외래 키 간의 관계가 항상 같게 유지되도록 보장해야한다.
만약, 학과 테이블에서 subject 칼럼의 'math'값을 삭제하거나 이름을 바꾸고자 한다.
이를 참조하는 값인 외래키(FK)가 존재하면, DBMS는 강제로 이를 막는다.
subject 값이 삭제되거나 변경되는 경우 참조 무결성이 깨지기 때문이다.
그렇다면, math라는 과목이름을 변경하거나 삭제해야하면 어떻게할까..? 😂
이 때, 바로 CASCADE Action을 사용한다.
CASCADE 옵션을 통해 참조 무결성이 깨지는 것을 허용하며,
관련된 모든 값을 업데이트하거나 삭제할 수 있음
ON DELETE
, ON UPDATE
로 제약해보자!!ON DELETE CASCADE;
: 부모 테이블의 특정 레코드가 삭제될때, 해당 레코드를 외래 키로 참조하는 모든 자식 테이블의 관련 레코드도 함께 삭제ON DELETE SET NULL;
: 부모 테이블에서 레코드가 삭제되면, 자식 테이블에서 해당 외래 키를 참조하던 열의 값을 NULL로 설정ON DELETE SET DEFAULT;
: 부모 테이블에서 레코드가 삭제되면, 자식 테이블에서 해당 외래 키를 참조하던 열의 값을 기본값으로 설정ON DELETE NO ACTION;
or ON DELETE RESTRICT;
: 부모 테이블에서 레코드가 삭제되지 않도록 방지합니다. 참조 키를 가진 레코드가 있으면 삭제를 허용하지 않음ON UPDATE CASCADE;
: 부모 테이블의 기본 키 값이 변경될 때, 해당 값을 외래 키로 참조하는 모든 자식 테이블의 관련 레코드도 함께 업데이트ON UPDATE SET NULL;
: 부모 테이블에서 기본 키 값이 업데이트되면, 자식 테이블에서 해당 외래 키를 참조하던 열의 값을 NULL로 설정ON UPDATE SET DEFAULT;
: 부모 테이블에서 기본 키 값이 업데이트되면, 자식 테이블에서 해당 외래 키를 참조하던 열의 값을 기본값으로 설정ON UPDATE NO ACTION;
or ON UPDATE RESTRICT;
: 부모 테이블에서 기본 키 값이 업데이트되지 않도록 방지합니다. 참조 키를 가진 레코드가 있으면 업데이트를 허용하지 않음