티스토리 뷰
[SQL] Error Cannot delete or update a parent row: a foreign key constraint fails
리미32 2023. 7. 8. 00:37테이블에서 외래키를 지우려했는데 다음과 같은 에러가 발생했습니다.
"Cannot delete or update a parent row: a foreign key constraint fails"
제가 에러가 발생했던 이유는 외래키가 있는 열의 데이터를 모두 지우지 않았기 때문이었습니다.
외래키로 되어있는 데이터는 부모 테이블에서와 자식 테이블에서 참조하고있습니다. 만약에 이 데이터를 자식 테이블에서 지우면, 데이터가 아예 사라져버려서 부모 테이블은 참조할 데이터가 사라집니다. 따라서 한 쪽 열에 데이터가 있는 상태로 외래키 열 자체를 삭제시켜버리면 안됩니다.
더 자세하게 설명하자면 다음과 같습니다.
외래 키(Foreign Key) 제약 조건을 통해 구현됩니다. 외래 키 제약 조건은 다음과 같은 두 가지 측면에서 참조 무결성을 유지합니다.
1. 데이터의 일관성 유지
외래 키는 부모 테이블의 기본 키(Primary Key)를 참조합니다. 이는 부모 테이블의 특정 레코드를 자식 테이블에서 참조하고 있는 것을 의미합니다. 이때, 부모 테이블의 기본 키 값이 변경되거나 삭제되면 자식 테이블에서 참조하는 데이터의 일관성이 깨질 수 있습니다. 예를 들어, 주문(Order) 테이블과 상품(Product) 테이블이 있다고 가정해봅시다. 주문 테이블의 외래 키인 상품 ID는 상품 테이블의 기본 키를 참조하고 있습니다. 이때, 상품 테이블에서 어떤 상품의 ID를 변경하거나 삭제하면, 해당 상품을 참조하는 주문 테이블의 데이터가 일관성을 잃게 됩니다.
2. 데이터의 정확성 유지
외래 키 제약 조건은 자식 테이블에서 유효한 값을 가지는 외래 키만 허용합니다. 즉, 부모 테이블에 존재하지 않는 값은 자식 테이블에서 참조할 수 없습니다. 이를 통해 데이터의 정확성을 유지할 수 있습니다. 예를 들어, 주문(Order) 테이블의 외래 키인 고객 ID는 고객(Customer) 테이블의 기본 키를 참조합니다. 만약 주문 테이블에 존재하지 않는 고객 ID를 가진 주문 데이터가 있을 경우, 외래 키 제약 조건에 의해 해당 데이터는 삽입되지 않고, 정확한 고객 ID를 가지는 주문 데이터만 허용됩니다.
따라서, 외래 키 제약 조건을 통해 참조 무결성을 유지함으로써 데이터베이스의 데이터 일관성과 정확성을 보장할 수 있습니다. 외래 키에 해당하는 열에 데이터가 남아있는 경우, 이러한 참조 무결성이 깨지므로 외래 키 제약 조건을 위반하게 되어 부모 테이블의 레코드를 삭제하거나 업데이트할 수 없습니다. 따라서 외래 키를 삭제할 때는 해당 키를 참조하는 자식 테이블의 데이터를 적절히 처리하여 참조 무결성을 유지해야 합니다.
해결
1. 외래키를 참조하는 열의 데이터를 모두 지운다.
2. 외래키 체크 설정을 해제한다.
-> 이 방법은 DB의 무결성이 깨질 수 있으므로 비추
SET foreign_key_checks = 0;
'개발 프로젝트 정리 > 새싹톤 웰리빙 프로젝트' 카테고리의 다른 글
🌱웰리빙 프로젝트 전체 회고🌱 (0) | 2023.07.17 |
---|---|
[NodeJS Error] 서버가 계속 죽을 경우 conn.release() 확인해보기 (0) | 2023.07.12 |
Error 409 Uncaught (in Promise) (0) | 2023.07.07 |
🌱웰리빙 프로젝트 서비스 기능, API, DB 소개🌱 (0) | 2023.07.03 |
🌱웰리빙 프로젝트 아이디어 기획 과정🌱 (0) | 2023.06.30 |
- Total
- Today
- Yesterday
- 프로젝트
- 혼공
- 혼공단
- 운영체제
- Signal
- JavaScript
- 자바스크립트
- 스페인
- AWS
- 백엔드 개발
- 해커톤
- Process
- MySQL
- nodejs
- SQL
- 스페인 교환학생
- 깃 예제
- 개발
- 교환학생
- 혼공단 SQL
- googleapis
- 백준
- 리눅스
- 혼공단 9기
- C++
- JS
- 공룡책
- Linux
- 혼공학습단
- 개발일지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |