Mysql - foreign key 무시하고 데이터 삭제하기

BigbrotherShin·2020년 5월 9일
3

Backend

목록 보기
11/15
post-thumbnail

foreign key constraint fails 에러

개발 진행 중에 테스트 데이터나 빠진 컬럼이 있는 등 테이블의 데이터를 모두 삭제해야 하는 순간이 있다. 이 때 한 테이블에서 다른 테이블을 참조하고 있다면 다음과 같은 에러가 발생하면서 데이터가 삭제되지 않는다.

mysql> DELETE TABLE [테이블명] or TRUNCATE [테이블명]

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

DELELTE TABLE과 TRUNCATE 의 차이점은 여기를 참고해주세요.

이는 Mysql이 테이블 간 관계가 있는 데이터를 함부로 수정하거나 삭제할 수 없도록 안전장치를 해두었기 때문에 에러를 통해 경고하는 것이다.

해결 방법

그럼에도 불구하고 데이터를 삭제하고자 한다면 삭제하고자 하는 테이블에서 다음과 같은 명령어를 실행하면 된다.

mysql> SET foreign_key_checks = 0; // 체크 해제
mysql> DELETE TABLE [테이블명] or TRUNCATE [테이블명]
mysql> SET foreign_key_checks = 1; // 다시 체크 설정

이는 테이블 자체를 삭제하는 SQL문인 DROP TABLE [테이블명]에도 사용할 수 있다.

참조:
MySQL - 테이블 데이터 삭제 - DELETE, TRUNCATE
인문학적 프로그래머 NamSa | MYSQL-foreign-key-무시하고-테이블-삭제

profile
JavaScript, Node.js 그리고 React를 배우는

0개의 댓글