반응형
오늘의 에러2...
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails
에러사항
실습 문제 풀이 중 아래와 같이 에러가 발생했다.
실습 문제)
배우 ID가 10인 배우의 정보를 삭제하시오.
작성한 쿼리문)
DELETE FROM actor WHERE actor_id = 10
actor_id 가 10에 해당하는 데이터를 삭제하려 했는데 아래와 같은 에러가 떴다.
에러)
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`sakila`.`film_actor`, CONSTRAINT `fk_film_actor_actor` FOREIGN KEY (`actor_id`) REFERENCES `actor` (`actor_id`) ON DELETE RESTRICT ON UPDATE CASCADE)
에러원인
이는 다른 테이블에 해당 데이터를 참조하고 있는 FK(Foreign Key, 외래키)가 존재 하기 때문!
해당 에러는 DELETE, UPDATE 시 발생할 수 있다.
아래 이미지와 같이 테이블 film_actor의 actor_id가 테이블 actor의 actor_id를 참조하고 있다.
해결
이때 해결 방법으로는,
1. 지우고 싶은 데이터와 연결되어 있는 다른 테이블의 데이터를 전부 지워준다.
2. foreign_key_checks = 0을 사용하여 FK제약을 임시로 해제한다.
(사용 후 무.조.건 foreign_key_checks = 1을 해줘야한다. 무!조!건)
+
cascade (정리해보기)
cascade 옵션을 사용하면 PK가 지워지면 해당 PK를 FK로 참조하는 데이터들도 연계되어 삭제가 된다.
고한다...
참고링크 : https://great-woman-hoseung.tistory.com/56
1번 : 연결된 데이터를 먼저 삭제해준다.
DELETE FROM film_actor WHERE actor_id = 10;
DELETE FROM actor WHERE actor_id = 10;
2번 : 쿼리문 위 아래 라인에 foreign_key_checks 를 비활성/활성 해준다.
SET foreign_key_checks = 0;
DELETE FROM actor WHERE actor_id = 1;
SET foreign_key_checks = 1;
+ foreign_key_checks 사용 시 주의사항
foreign_key_checks 의 설정은 FK 제약과 상관없이 쿼리문을 수행하게 해준다.
따라서, 이후 실행된 쿼리문들이 FK제약에 위반된 테이블 혹은 데이터를 생성할 수 있다는 것!!
그래서
1. 단순 테스트 코드나 일회성? 코드를 작성할 때 사용하거나
2. FK제약에 위반된 테이블 혹은 데이터를 생성한 후 위반사항들을 처리해주자!
(예를 들어 자식테이블에 부모테이블에 없는 값을 억지로? 생성/갱신 하였다면,
이후 부모테이블에도 해당값을 데이터로 생성해주자!)
반응형
'오늘의 삽질... 에러모음' 카테고리의 다른 글
[HTML] 네모빔? 해결하기 (0) | 2025.02.18 |
---|---|
[Linux] VM에서 Ubuntu 설치 시 에러 정리 (0) | 2025.02.03 |
[MySQL] Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails... (0) | 2025.01.22 |
[MySQL] Error Code: 1093. You can't specify target table 'table_name' for update in FROM clause (0) | 2025.01.21 |
[python] ModuleNotFoundError: No module named 'selenium' (0) | 2025.01.20 |
댓글