1

こんにちは、指定されたデータに基づいてテーブルからいくつかの行を削除し、同じテーブルの同じデータに対して選択クエリを実行しているトランザクションがあります。それを試してみましたが、成功しています。その時点で削除操作を実行しようとすると、トランザクションロジックによってテーブルにロックが適用されるため、トランザクションがコミットされない限り、テーブルから同じデータを読み取ることができない場合があります。したがって、この種のシナリオが有効であるか、または私の理解に誤りがあるかを知りたいです。

関数内の本体は次のシーケンスに従います。

public void method(){

//transaction starts

// delete operation on table 1

// select operation on table 1

// transaction is committed. 

}
4

2 に答える 2

3

同じトランザクションのコンテキストでデータを削除してから選択しても問題はありません。

同じデータを処理する複数の同時トランザクションがある場合は、ロックを考慮する必要がある場合があります。正確なメカニズムは、トランザクションの実行内容、DBMS エンジン、トランザクション分離レベルなどによって異なります。

于 2012-12-04T13:26:25.470 に答える
0

使用しているデータベースについては言及していませんが、以下は一般的で一般的なものです。

メソッドが削除と選択に同じ接続を使用する場合、接続のコンテキスト (観点) からは削除が発生しているため、「同じテーブルの同じデータに対する」クエリはレコードを返しません。

他のすべての同時接続 (削除と選択に同じ接続を使用していない場合はメソッドを含む) からは、作業はコミットされないため、テクノロジと設定によっては、ロールバックまたはコミットするまで、それらの作業がブロックされる可能性があります。または、取引開始前のバージョンのデータが表示される場合があります。

于 2014-12-17T19:58:21.213 に答える