엔지니어로 가는 길

MySQL Error Code: 1452. Cannot add or update a child row 해결 본문

프로그래밍/데이터베이스

MySQL Error Code: 1452. Cannot add or update a child row 해결

탐p슨 2020. 5. 6. 21:39
728x90

에러메시지

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`vanilla`.`#sql-1c10_73`, CONSTRAINT `document_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `_user` (`id`))

 

상황

@ document라는 테이블과 _user라는 테이블이 있다.

@ _user는 사용자를 나타내고, document는 사용자가 쓴 글을 나타내는 테이블이다.

@ _user의 PK는 id이다.

@ document와 _user 모두 몇 개의 튜플이 존재한다.

@ 이후에 document에 user_id라는 컬럼을 추가했다.

@ document의 user_id를 외래키로 설정하려고 시도했으나 에러코드를 만났다.

 

원인

document의 user_id라는 컬럼은 처음부터 있던 게 아니라 나중에 추가한 컬럼이다. 따라서 document 테이블에 있던 기존 튜플에는 user_id 컬럼은 비어있는 상태였다. 이 상황이 참조 무결성을 위배한 것 같다.

 

참조 무결성이란 데이터베이스의 신념 중 하나로, 예를 들어 A 테이블의 a 컬럼이 B 테이블의 b 컬럼을 참조하고 있다면 이 두 컬럼은 항상 값이 일관되어야 함을 말한다. 즉, B 테이블에서 값을 변경시켰다면 이 변경사항이 A 테이블에도 적용되어야 한다. 또한 B 테이블의 b 컬럼에 없는 값을 A 테이블 a 컬럼에서 가질 수 없다. 아래의 그림은 참조 무결성이 깨진 예시이다.

 

          https://en.wikipedia.org/wiki/Referential_integrity

 

위의 상황을 보면 user 테이블의 id는 값이 있었지만 이를 참조하려는 document의 user_id에는 값이 존재하지 않아 일관성이 없었다. 이 상황에서 user_id를 외래키로 설정하려는 시도는 데이터베이스의 신념에 반하는 행동이었다.

 

해결

document 테이블의 user_id 컬럼에 값을 채우니 외래키 설정이 잘 이루어졌다.

 


 

참고:

https://www.quora.com/How-can-I-solve-this-problem-Cannot-add-or-update-a-child-row-a-foreign-key-constraint-fails

 

How can I solve this problem "Cannot add or update a child row: a foreign key constraint fails"?

Answer (1 of 3): The error is caused by related tables. You are trying to insert data to Kids which refers Parents but that record doesn’t exist in Table Lets see an example: Parents: id,name Kids: id,parent_id,name In parents table you have this record: 1

www.quora.com

 

728x90
Comments