web-dev-qa-db-ja.com

1452-子行を追加または更新できません:外部キー制約が失敗します

私はこのエラーを受け取っています:

1452-子行を追加または更新できません。外部キー制約が失敗します。

私はそれらを見つけて、参照を取り除きます

alter table tillhör drop foreign key kat_id;

しかし、代わりにこのエラーを取得します:

#1025-「。\ recept\tillh @ 1ir」の名前を「。\ recept#sql2-1570-3cb」に変更する際のエラー(errno:152)。

何が間違っていますか?

17
Mia Raunegger

クエリを実行する前に

SET FOREIGN_KEY_CHECKS=0

完了したら1に設定します。

38
Mihai

私は同じ問題に直面しています。この問題を解決することで解決します。つまり、子テーブルからすべてのデータを削除し、正常に完了します。

これは、子テーブルに、親テーブルにない外部キーを持つデータが含まれている場合、つまりPerson(列ID、名前、アドレス)とという2つのテーブルがある場合に発生しますorder(列ID、person_id、order_name); order.person_idはperson.idの外部キーであり、orderテーブルにはpersonテーブルに存在しないperson_idが含まれています

次のクエリを使用してこれを解決できます

Delete from order where person_id NOT IN (select id from person where person.id = order.person_id)
14

この問題が発生したのは、外部キーIDフィールドを作成するときに許可されたNULLSを指定するのを忘れていたためです。事後に変更しましたが、値にはすでに0が含まれていました。一致するテーブルで0が見つからなかったため、このエラーが発生しました。修正:ゼロ値をヌルに更新します。

7
Cymbals

親テーブルから子テーブルにnullを設定するか、同じ値を設定する必要があります。例:子テーブルの最初nam = Derick親テーブル名= Derick

0
derick