私は4つのテーブルを持っています。最初のテーブルでは主キーとしてappidがあり、他の3つのテーブルではその外部キーがあります。 1つのクエリで3つすべてのデータを削除したい。私はベストを尽くしたが失敗した。誰でも助けることができますか?複数のテーブルから同時にレコードを削除しますか?
答えて
複数のテーブルを参照するdelete文を記述することはできません.4つのdelete文を記述する必要があります。
ただし、必要に応じて、3つの子テーブルの外部キーを "ON DELETE CASCADE"に定義することができます。親テーブルから削除すると、3つの子テーブルの関連する行もすべて削除されます。これは時々役に立ちますが、開発者にとって危険で混乱する可能性があるため、一般的な方法としては推奨しません。
カスケードする外部キーの危険で混乱しやすい性質を詳しく教えてください。私はこの発言に少し驚いているからです。 – Rene
@Rene、それはよく起こります。私は現在、誰かがON DELETE CASCADEとして多くの外部キーを設定したプロジェクトで作業しています。たとえば、ユーザーが 'DELETE order_status_lookup WHERE status_code = 'SHIPPED''のようなことをした場合、それは成功し、ステータス' SHIPPED 'を持つすべての注文も削除されます。私はそれを危険だと呼びます!私は実際にはON DELETE CASCADEを使用しますが、実際には理にかなっています。 –
あなたが言っていることは、それが非常に有用であるかもしれないが間違った方法で使用されるツールが害を引き起こす可能性があるということです。チェーンソーのようなビットはそうではありませんか?しかし、これらの木をすべて手動で切断することをお勧めしますか? – Rene
単一のステートメントで多数のテーブルから削除する方法はありませんが、より良い質問は、なぜ同時にすべてのテーブルから削除する必要があるかです。 Oracleでトランザクションがどのように機能するかを完全に理解していないように思えます。
テーブル1から行を削除しても、コミットしないとします。他のすべてのセッションに関する限り、その行は削除されていません。別の接続を開いてその行を照会すると、行はまだそこにあります。
次に、テーブル2,3、および4から順に削除します。依然としてトランザクションをコミットしていないので、データベース上の他のすべてのセッションで削除された行が引き続き表示されます。
次にコミットします。
同時に、他のセッションでは、4つの別々のステートメントで削除を行ったにもかかわらず、4つのテーブルから削除した行が表示されなくなります。
データベースがMysqlの場合、DELETE文でjoinを使用できます。 詳細については、http://dev.mysql.com/doc/refman/5.0/en/delete.htmlを参照してください。
しかし、そうではありません。それはオラクルです。 –
別のコメント(トランザクションまたはカスケードの削除を使用)に加えて、トリガーを使用して子テーブルから削除することもできます。 –
- 1. Access 2007の複数のテーブルからレコードを削除
- 2. データベースとDataGridViewからレコードを同時に削除するC#
- 3. joinを使用して複数のテーブルからレコードを削除する
- 4. SQL Serverの複数のテーブルから多数のレコードを削除するベストプラクティス
- 5. 複数のテーブルからの削除ASP.NET
- 6. 複数のテーブルから削除
- 7. 削除する方法重複レコードから1つを除いてSQLテーブルから重複レコードを削除しますか?
- 8. テーブルから重複レコードを削除する
- 9. 複数のテーブルから1つのレコードを削除するSQL Serverのトリガー
- 10. Google App Engineテーブルからレコードを削除
- 11. oracleウェアハウス・テーブルから1Bnレコードを削除
- 12. dynamo dbの複数のテーブルでレコードを非同期に削除する
- 13. リストの複数の範囲を同時に削除しますか?
- 14. 同時に複数のユーザーのテーブルにレコードを挿入する
- 15. 複数のテーブルのレコードを同時に表示すると同時に新しいレコードを追加する
- 16. CakePHPとAJAXを使用してテーブル内の複数のレコードから1つのレコードを削除する方法
- 17. テーブルからの列を複数回同じレコードを返す
- 18. PostgreSQLのテーブルの列から同様のレコードを削除するには
- 19. 複数のテーブルを結合した後にSQLクエリ結果から重複レコードを削除する方法
- 20. ListView、nullポインタ例外から複数のアイテムを同時に削除する
- 21. delete関数は、テーブルから最後のレコードを削除します。 js jquery.updated
- 22. wordpressの複数のテーブルからデータを削除するには?
- 23. sqliteの複数のテーブルからデータを削除するには?
- 24. 列の重複値を使用してテーブルからレコードを削除するQuestionId
- 25. "テーブルから削除"テーブルを削除しませんか?
- 26. 一時テーブルから重複する行を削除する
- 27. ビューから重複レコードを削除します
- 28. mysqlの同じ列を持つ複数のテーブルから削除する方法
- 29. 終了時に複数のシェーダーを削除しますか?
- 30. Algolia:ダッシュボードから複数のレコードを削除
これは、解決のために参照アクション「ON DELETE CASCADE」が発明された問題です。 @トニーアンドリュースとは違って、私はそれを一般的な習慣として勧めます。 – onedaywhen