3

MYSQLの両方のテーブルから選択した行を削除しています。2つのテーブルには外部キーがあります。

DELETE d,b
  FROM A as b
  INNER JOIN B as d on b.bid=d.bid WHERE b.name LIKE '%xxxx%';

両方のテーブルから削除しようとしても、MYSQLは外部キーについて文句を言います。

Error: Cannot delete or update a parent row: a foreign key constraint
fails (`yyy/d`, CONSTRAINT `fk_d_bid` FOREIGN KEY (`bid`) REFERENCES 
`b` (`bid`) ON DELETE NO ACTION ON UPDATE NO ACTION)

両方のテーブルから削除するためのここでの最良の解決策は何ですか?

4

2 に答える 2

6

この制約を使用するように変更しますON DELETE CASCADE。つまり、行が削除されると、「子」行も自動的に削除されます。

もちろん、CASCADEの使用には十分注意してください。必要な場合にのみ使用してください。それに熱心で、誤って適切に配置されたDELETEを実行すると、データベースの半分が削除される可能性があります。:)

外部キー制約に関するドキュメントを参照してください。

于 2010-05-05T00:47:19.160 に答える
0

私はあなたがやろうとしていることを理解していると思います

テーブル構造を変更できない場合は、2つのステートメントを使用できます。最初のステートメントは副選択を使用します。

入札INのBから削除('%xxxx%'のような名前のAから入札を選択);

'%xxxx%'のような名前のAから削除します。

于 2010-05-05T00:50:14.813 に答える