Anarchy In the 1K

DBのトランザクション分離レベル

目次

トランザクション分離レベルとは

 DBにおいて、複数のトランザクションが同時に実行された際に、相互に影響を与える度合いを示すものです。下記の通り、トランザクションが相互に影響を与えるケースがある為、許容可能なトランザクション分離レベルを選択する必要があります。

トランザクションが相互に影響を与える事象

値の更新時

  • ダーティーリード: 別トランザクションがWRITEした、コミット前のデータをREADしてしまうこと。下図においては、READ1READ2で結果が変わってしまう。
  • 反復不能読み取り: 別トランザクションがWRITEした、コミット後のデータをREADしてしまうこと。下図においては、READ2READ3で結果が変わってしまう。

f:id:fujiU:20200524170941p:plain

レコードの追加時

  • ファントムリード: 別トランザクションがCREATEした、コミット後のデータをREADしてしまうこと。下図においては、READ1READ2で結果が変わってしまう。

f:id:fujiU:20200524172721p:plain

トランザクション分離レベルの一覧

分離レベル 説明 防止可能な事象
READ UNCOMMITTED コミットされていないデータを参照する可能性がある。 -
READ COMMITTED READ実行の直前までにコミットされたデータのみを参照する。 ダーティーリード
REPEATABLE READ トランザクション開始の直前までにコミットされたデータのみを参照する。 反復不能読み取り
SERIALIZABLE 複数のトランザクションを逐次的に実行した結果が返却される。 ファントムリード