본문 바로가기
MySql

MySQL-하위 행을 추가하거나 업데이트 할 수 없음 : 외래 키 제약 조건이 실패 함

by 베이스 공부 2021. 1. 23.
반응형

이것은 일반적인 오류 인 것 같지만 제 삶에서는 이것을 알아낼 수 없습니다.

외래 키를 통해 함께 묶인 MySQL에 InnoDB 사용자 테이블 세트가 있습니다. 상위 user 테이블 및 이메일 주소, 작업 등을 저장하는 하위 테이블 세트. 이들은 모두 외래 키 에 의해 상위 user 테이블에 연결됩니다. > uid , 모든 상위 및 하위 키는 int (10) 입니다.

모든 하위 테이블에는 user.uid 를 가리키는 외래 키 제약 조건이있는 uid 값이 있으며 ON DELETE CASCADE ON UPDATE CASCADE .

user 에서 사용자를 삭제하면 모든 하위 제한 항목이 제거됩니다. 그러나 user.uid 값을 업데이트하려고하면 하위 테이블에 uid 변경을 계단식으로 적용하지 않고 다음 오류가 발생합니다.

#1452 - Cannot add or update a child row: a foreign key constraint fails (`accounts`.`user_email`, CONSTRAINT `user_email_ibfk_2` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE)

나는 여기서 명백한 것을 놓치고있는 것 같다. user_email 로 키 제약 조건을 제거하고 user 의 값을 업데이트하려고하면 동일한 오류가 발생하지만 다음 알파벳순 user 하위 테이블에 대해 나는 그것이 테이블 특정 오류라고 생각하지 않습니다.

편집하다:

SHOW ENGINE INNODB STATUS 의 결과 추가 :

------------------------
LATEST FOREIGN KEY ERROR
------------------------
121018 22:35:41 Transaction:
TRANSACTION 0 5564387, ACTIVE 0 sec, process no 1619, OS thread id 2957499248 updating or deleting, thread declared inside InnoDB 499
mysql tables in use 1, locked 1
17 lock struct(s), heap size 2496, 9 row lock(s), undo log entries 2
MySQL thread id 3435659, query id 24068634 localhost root Updating
UPDATE `accounts`.`user` SET `uid` = '1' WHERE `user`.`uid` = 306
Foreign key constraint fails for table `accounts`.`user_email`:
,
  CONSTRAINT `user_email_ibfk_2` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE
Trying to add in child table, in index `uid` tuple:
DATA TUPLE: 2 fields;
...
A bunch of hex code

But in parent table `accounts`.`user`, in index `PRIMARY`,
the closest match we can find is record:
...
A bunch of hex code

 

해결 방법

 


 

참조 페이지 https://stackoverflow.com/questions/12966626

 

 

반응형

댓글