SQL 실습을 진행하는데 (진행한 실습 프로젝트 링크)
'subject 테이블로부터 과목명(sub_name)이 UML인 과목을 삭제하고 subject 테이블을 출력' 하는 부분에서
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
위와 같은 에러를 마주했다.
(이 게시물을 에러를 해결 한 카테고리로 분류하자니 요즘 sql 공부 중이라 실습을 진행하면서 배우게 되는 것들을 정리해 두면 좋을 것 같아 새로운 카테고리를 만들어서 포스팅을 하게 되었다.)
검색을 해 보니 한 테이블에서 다른 테이블을 참조하고 있는 경우에 나타나는 에러라고 한다.
나 같은 경우에는 여러 개의 테이블을 사용하고 있었고 이 테이블 간에 관계가 있었다.
때문에 Mysql이 테이블 간 관계가 있는 데이터를 함부로 수정 혹은 삭제를 할 수 없도록 해두었기에 데이터의 안정성에 대해 경고를 하는 것이다.
해당 에러를 무시하고 계속 진행하고자 한다면
SET foreign_key_checks = 0; #체크 해제
delete from subject where sub_name = 'UML'; #subject 테이블로부터 과목명(sub_name)이 UML인 과목을 삭제하고 subject 테이블 출력
SET foreign_key_checks = 1; #체크 설정
select * from subject; #바뀐 부분 확인
위와 같이 SET foreign_key_checks = 0; 해당 명령어를 실행 해 주면 된다.
Foreign Key의 제약조건(Constraint)을 끈다(체크 해제)고 하는데 이 명령어를 실행 해 주었다면
진행하고자 했던 명령어를 실행한 후 (여기선 delete)
다시 제약조건을 SET foreign_key_checks = 1; 명령어를 실행시켜 켜주면(체크 설정) 된다.
위의 명령문을 실행시키면 이렇게 문제없이 실행되어 결과물을 볼 수 있다!