2017-08-04 17 views
0

私はMySQLデータベースを持っています。私はplaces.match_no > 26matches.chart_id = 106のすべての一致を削除したいと思います。内部結合で外部キー制約のあるMySQL削除が失敗します

DELETE matches 
FROM kk_matches AS matches 
INNER JOIN places ON places.id = matches.place_id 
    AND places.match_no > 26 
WHERE matches.chart_id = 106 

これは、エラーが発生します。

#1451 - Cannot delete or update a parent row: a foreign key constraint fails...

何をしますか?

答えて

1

データベースに、kk_matchesテーブルへの外部キーを持つ別のテーブルがあります。 kk_matchesテーブルのレコードを削除する前に、そのレコードを指す他のテーブルのレコードをkk_matchesで削除する必要があります。あなたがそれらの他の記録を "孤立させる"ではないならば、

外部キーは、これらの操作を回避する手段として存在し、データが無関係になる可能性があります。

1

外部キー制約によって参照されるフィールドを持つ行を削除することはできません。最初に参照する行を削除してから、必要な行を削除する必要があります(または、意図しない場合は制約を削除する必要があります)。

チェック詳細は、このチュートリアル:

https://www.w3schools.com/sql/sql_foreignkey.asp

3

What to do?

は、最初の子テーブルに依存する行を削除してから、親テーブルの行を削除するために行きます。実際に行うべきことはFOREIGN KEYON DELETE CASCADEと定義しながら、CASCADEオプションを定義することです。

別のオプションはBEFORE DELETEトリガーを持っているし、そこにDELETE子テーブルの行

+0

は、子テーブルは 'ON NO ACTION'を削除しており、それは私が使用したいものだんです。 – xms

関連する問題