これはよくある間違いのようですが、私の人生ではこれを理解することはできません。
MySQLに外部キーを介して結合された一連のInnoDBユーザーテーブルがあります。親user
テーブル、および電子メールアドレスやアクションなどを格納する子テーブルのセット。これらはすべてuser
、外部キーによって親テーブルに関連付けられておりuid
、すべての親キーと子キーはint(10)
です。
すべての子テーブルには、uid
を指す外部キー制約を持つ値がありuser.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