SET TRANSACTION ISOLATION

現在の接続のトランザクション分離レベルを、ODBC で指定した分離レベル モードのいずれかに設定します。

構文:

>>--EXEC SQL--SET TRANSACTION ISOLATION------------------->

 >-------.-READ UNCOMMITTED-.---------END-EXEC------------><
         +-READ COMMITTED---+
         +-REPEATABLE READ--+
         +-SERIALIZABLE-----+ 

説明:

トランザクション分離レベルの設定に応じて、トランザクションは次のように相互作用できます。

  • ダーティ読み取り - トランザクション 1 は行を更新します。トランザクション 2 は、トランザクション 1 がコミットする前に行を読み取ります。トランザクション 1 がロールバックを発行すると、トランザクション 2 の結果は無効なデータに基づいたものになります。
  • 反復不能読み取り - トランザクション 1 は行を読み取ります。トランザクション 2 は行の更新または削除を行い、その変更内容をコミットします。トランザクション 1 が行を再度読み取る場合、トランザクション 1 は別の値の取得または行の再読み取りは実行できません。
  • ファントム - トランザクション 1 は WHERE 句を指定した SELECT を使用して行のセットを読み取ります。トランザクション 2 は WHERE 句の要件を満たす行を挿入します。トランザクション 1 が SELECT を繰り返す場合は、トランザクション 1 が別の行のセットを読み取ります。

これらの状況を制御するには 2 種類の方法があり、1 つはペシミスティック同時実行と呼ばれる方法で、あるトランザクションが完了するまで他のトランザクションを待機させます。もう 1 つはオプティミスティック同時実行と呼ばれる方法で、この状況が発生した場合にトランザクションを強制的にロールバックすることで同時実行への影響を抑えます (ただし、作業が強制的に繰り返される可能性があります)。

READ UNCOMMITED モードでは、ダーティ読み取り、反復不能読み取り、およびファントムをすべて使用できます。

READ COMMITED モードでは、ダーティ読み取りは使用できませんが、反復不能読み取りおよびファントムは使用できます。

REPEATABLE READ モードでは、ダーティ読み取りおよび反復不能読み取りは使用できませんが、ファントムは使用できます。

SERIALIZABLE モードでは、ダーティ読み取り、反復不能読み取り、およびファントムをすべて使用できません。

注:

ドライバーによっては、ODBC で定義した分離レベルがすべてサポートされているとは限りません。ドライバーでサポートされていないモードを設定する場合は、それに応じて SQLCODE および SQLSTATE を設定します。

例:

EXEC SQL SET TRANSACTION ISOLATION READ UNCOMMITTED END-EXEC