2017-08-07 16 views
0

"ON DELETE CASCADE"を除いて、table1のcolum1があります。columにON DELETE CASCADEがない場合、どのようにカスケード削除を実行しますか?

表2のcolum2、表3のcolum3。両方ともcolum1への外部キーを持っています

column1の値とcolumn1の外部キーを持つtable2とtable3の値を削除する方法はありますか?

EDIT: 親テーブルから子テーブルから行を削除することはできません。 私はあなたが、ON DELETE CASCADEを必要とする親テーブルから、子テーブルからわずかDELETE行はありません

答えて

0

...表4点から colum4がそうで表3からcolum3とする複雑なсonnections、と非常に巨大なデータベースを持っています。

DELETE FROM table2 
WHERE column2 = ?; 

DELETE FROM table3 
WHERE column3 = ?; 

DELETE FROM table1 
WHERE column1 = ?; 

EDIT:

私は、親テーブルから、子テーブルから行を削除することはできません。私は複雑な接続を持つ非常に巨大なデータベースを持っています。ここでは、table4のcolum4がtable3のcolum3を指しています。

複数のカスケード接続されたDELETEに依存するよりも明示的に行うほうが安全です。意図しない削除で終了する可能性があります。

+0

@macmoonshine非常に危険なこともあります。私は明示的に 'DELETE'を好む:) – lad2025

+0

親から削除しようとすると、postgresqlはあなたに子の行が失敗することを知らせるでしょう。だからあなたは、親の削除を試みることができます、エラーをつかんで、それを解析し、子テーブルの行を削除します。 –

0

親レコードを削除する前に、子レコードを削除するだけです。 CASCADEの外に、これを達成する他の方法はありません。データベースには理由があるためDDLがあります。正しい、間違っている、または無関心である。

関連する問題