私は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. 複数のテーブルからの削除ASP.NET
- 3. 複数のテーブルから削除
- 4. 削除する方法重複レコードから1つを除いてSQLテーブルから重複レコードを削除しますか?
- 5. テーブルから重複レコードを削除する
- 6. 複数のテーブルから1つのレコードを削除するSQL Serverのトリガー
- 7. Google App Engineテーブルからレコードを削除
- 8. 複数のテーブルのレコードを同時に表示すると同時に新しいレコードを追加する
- 9. CakePHPとAJAXを使用してテーブル内の複数のレコードから1つのレコードを削除する方法
- 10. sqliteの複数のテーブルからデータを削除するには?
- 11. "テーブルから削除"テーブルを削除しませんか?
- 12. Azureテーブルの複数のレコードを削除する
- 13. ビューから重複レコードを削除します
- 14. 終了時に複数のシェーダーを削除しますか?
- 15. MYSQLテーブルからの重複を削除
- 16. 複数のテーブルからレコードを取得
- 17. c2dm登録解除時にmysqlからレコードを削除
- 18. スライドをテーブルからレコードを削除するには
- 19. Mysqlテーブルから複数のランダムな行を削除する
- 20. 同時に複数のレコードを複数のレコードに挿入する
- 21. テーブルからすべてのレコードを削除する
- 22. テーブルからすべてのレコードを削除する
- 23. SQL複数のテーブルから削除するトリガー
- 24. SQL削除コマンドは実際にテーブルからレコードを削除していませんか?
- 25. 複数の列が一致する行を削除同じテーブル
- 26. mySql join - 同じテーブルの複数のレコード
- 27. MySQLテーブルから別のテーブルにあるレコードを削除する方法
- 28. 複数のレコードをJQueryからRailsテーブルに保存しますか?
- 29. 古い重複レコードを選択して削除しますか?
- 30. テーブルからレコードを選択、カウント、削除する簡素化
これは、解決のために参照アクション「ON DELETE CASCADE」が発明された問題です。 @トニーアンドリュースとは違って、私はそれを一般的な習慣として勧めます。 – onedaywhen