→データベース関連
ANSI標準の4つの分離レベル(アイソレーションレベル)†
- READ UNCOMMITED
- もっとも安全度低い
- 他プロセスがトランザクション中にUPDATEしたデータをCOMMITする前にSELECT(ダーティリード)可能
- READ COMMITED
- デフォルトの分離レベル。引数なしでBeginTrans()するとこれになる(SQL Server 2005)
- ダーティリード不可
- 自分のトランザクション中に、自分がSELECTしただけのレコードは他プロセスがUPDATE-COMMITできる(=反復不可能読み取りが可)
- つまり、自分のトランザクション中のSELECT結果の一貫性が保証されない
- READ_COMMITED_SNAPSHOTオプションの状態によって動作が異なる
- OFFのとき、トランザクションにひっかかったクエリは待たされる
- ONのとき、トランザクションにひっかかったクエリは、トランザクション開始前の状態を取得し、ロック待ちをしない
- REPEATABLE READ
- ダーティリード不可
- 自分のトランザクション中に、自分がSELECTしただけのレコードも他プロセスがUPDATE-COMMITできない(=反復不可能読み取りが不可)
- 自分のトランザクション中に、自分がSELECTした条件にマッチするレコードをINSERT可能(=ファントム発生可)
- つまり、自分のトランザクション中のSELECT結果は、その時点で存在していたレコードについては同じであることが保証されるが、存在していなかったレコードが追加されている可能性はある
- SERIALIZABLE
- ダーティリード、反復不可能読み取り、ファントム発生すべてが不可
- トランザクションのSELECT結果は外部からの影響を一切受けないことが保証される
Last-modified: 2025-03-09 (日) 02:37:05