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 [테이블명]에도 사용할 수 있다.
'DATABASE' 카테고리의 다른 글
[MariaDB/Mysql] Join 정리 (INNER/LEFTJOIN) (0) | 2021.08.11 |
---|---|
[MariaDB/Mysql] 컬럼명 변경 / 데이터타입(자료형) 변경 (0) | 2021.08.10 |
[MariaDB/Mysql] primary key 설정 (0) | 2021.08.10 |
[MariaDB] MariaDB 기본 (0) | 2021.08.09 |
[Oracle] 오라클 데이터베이스 연습문제 (0) | 2021.07.27 |
댓글