DBのトランザクション分離レベル
目次
トランザクション分離レベルとは
DBにおいて、複数のトランザクションが同時に実行された際に、相互に影響を与える度合いを示すものです。下記の通り、トランザクションが相互に影響を与えるケースがある為、許容可能なトランザクション分離レベルを選択する必要があります。
トランザクションが相互に影響を与える事象
値の更新時
- ダーティーリード: 別トランザクションがWRITEした、コミット前のデータをREADしてしまうこと。下図においては、
READ1
とREAD2
で結果が変わってしまう。 - 反復不能読み取り: 別トランザクションがWRITEした、コミット後のデータをREADしてしまうこと。下図においては、
READ2
とREAD3
で結果が変わってしまう。
レコードの追加時
- ファントムリード: 別トランザクションがCREATEした、コミット後のデータをREADしてしまうこと。下図においては、
READ1
とREAD2
で結果が変わってしまう。
トランザクション分離レベルの一覧
分離レベル | 説明 | 防止可能な事象 |
---|---|---|
READ UNCOMMITTED | コミットされていないデータを参照する可能性がある。 | - |
READ COMMITTED | READ実行の直前までにコミットされたデータのみを参照する。 | ダーティーリード |
REPEATABLE READ | トランザクション開始の直前までにコミットされたデータのみを参照する。 | 反復不能読み取り |
SERIALIZABLE | 複数のトランザクションを逐次的に実行した結果が返却される。 | ファントムリード |