メソッドがデータベースからデータを読み取るだけで、データベースに書き込まないとします。そのようなメソッドをトランザクション内で実行する必要がないのは常に事実ですか?
3 に答える
多くのデータベースでは、明示的なトランザクションに含まれていないデータベースからの読み取り要求は、要求を実行するためのトランザクションを暗黙的に作成します。
SQLデータベースでは、複数のSELECT
ステートメントを実行していて、他のトランザクションからの変更を1つに表示したくSELECT
ないが、以前のトランザクションには表示したくない場合は、トランザクションを使用できます。トランザクション分離レベルで実行されているSERIALIZABLE
トランザクションは、複数のステートメントにわたってデータの一貫したビューを表示します。
いいえ。特定の分離レベルで読み取らないと、十分な保証が得られない可能性があります。たとえば、行が消えたり、新しい行が表示されたりする場合があります。
これは、単一のステートメントにも当てはまります。
select * from Tab
except select * from Tab
このクエリは、テーブルを2回スキャンするため、同時変更の場合に実際に行を返すことができます。
SQL Server:高速で、ブロックせず、ロックせず、一貫性のある読み取りを行う簡単な方法があります。スナップショットアイソレーションを有効にして、スナップショットトランザクションで読み取ります。AFAIKOracleにはこの機能もあります。Postgresも。
トランザクションの目的は、データベースに対して実行された操作をロールバックまたはコミットすることです。uが値を選択するだけで、データに変更を加えない場合は、トランザクションは必要ありません。