2016-10-13 4 views
0

私のクエリはMySQLで2つのテーブルから行を削除することはできません

delete ip.*,im.* 
from INPUT_MAPPING im 
left outer join INPUT_CONFIGURATION ip on(im.INPUT_ID=ip.INPUT_ID) 
where ip.INPUT_ID=78 

ここINPUT_CONFIGURATIONが親表とINPUT_MAPPINGが子テーブルであると INPUT_IDがINPUT_CONFIGURATIONテーブルとの外部キーの主キーでありますiは

78としてエラー共通INPUT_を有するINPUT_CONFIGURATIONテーブルからINPUT_MAPPINGテーブルから行を削除するだけでなくすることができません。このクエリを使用してINPUT_MAPPINGテーブル

実行後に来るのは

11:19:52 delete ipです。 、im。 1451は、親行を削除または更新できません: 外部キー制約が失敗したIMをINPUT_MAPPINGからは(im.INPUT_ID = ip.INPUT_ID)ここ ip.INPUT_IDは= 78

エラーコードの INPUT_CONFIGURATIONのIPを外部結合左(clover_converter.INPUT_MAPPING、 CONSTRAINT INPUT_MAPPING_ibfk_1 FOREIGN KEY(INPUT_ID)が INPUT_CONFIGURATION(INPUT_ID)を参照)0.0033秒

+2

なぜあなたはdeleteステートメントで左結合を使用しますか?本当に親テーブルのエントリを削除しますか?それはあなたが得るエラーです。 Input_Mappingには、削除した主キーと一致する別のエントリがある可能性があります。 – rbr94

+0

親テーブル(INPUT_CONFIGURATION)と子テーブル(INPUT_MAPPING)の両方からエントリを削除したい.iこのクエリは多くのサイトで検出され、動作しません。感謝 – user2715085

+0

外部キー制約をどのように定義しますか? 'ON DELETE'のアクションは何ですか? – rbr94

答えて

0

あなたが親と子の用語が好きで、あなたは、彼らが覚えられやすいと感じる場合は、好きなことON DELETE CASCADEの翻訳は孤児を残しません!

これは、親行が削除(強制終了)されると、孤立した行が子テーブルに存続することがないことを意味します。親行のすべての子も殺されます(削除されます)。これらの子のいずれかが(別のテーブルから別の外部キーを介して)孫を持っていて、ON DELETE CASCADEが定義されている場合は、これらの子もすべて削除されます(カスケード効果が定義されている限り、すべての子孫)。

FOREIGN KEY制約自体は、孤児を許可しないように記述することもできます。 (最初は)。親がない場合(親テーブルの行)、子テーブルには子テーブルが許可されてはいけません。

一貫性を保つために、ON DELETE RESTRICTは、(あまり積極的でない)You Can not Kill Parentsに翻訳することができます。子なしの行のみが削除されます(削除されます)。

0

質問から、CASCADING DELETEが有効になっていると仮定することは安全です。 その場合に必要なのは、すべてです。

DELETE FROM MainTable 
WHERE PrimaryKey = ??? 
+0

...答えをありがとう..その完了 – user2715085

+0

はいコーディングを楽しむ –

関連する問題