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