ACIDはデータベースのトランザクションが満たすべき4つの基本的な特性を表す頭文字で、それぞれAtomicity(原子性)、Consistency(一貫性)、Isolation(分離性)、Durability(耐久性)を指します。この中で、Isolation(分離性)はトランザクションが他のトランザクションから独立して実行されることを保証する特性を指します。  分離性 (Isolation) の主な目的は、複数のトランザクションが同時に実行される場合に、それらが互いに干渉しないようにすることです。これにより、各トランザクションは他のトランザクションが存在しないかのように動作し、データベースの一貫性が保たれます。

Transactionが互いに影響し合う現象を、Read Phenomenaという。以下の種類がある。

  1. Dirty Reads: あるトランザクションが別のトランザクションによって変更されたがまだコミットされていないデータを読むこと。更新中の誤ったデータを取得する可能性がある。
  2. Non-Repeatable Reads: あるトランザクションが同じデータを2回読む間に別のトランザクションによってそのデータが変更されること。
  3. Phantom Reads: あるトランザクションが行の範囲を2回読む間に別のトランザクションによってその範囲に新しい行が追加または削除されること。

ReadPhenomena の具体例

  1. Dirty Reads:
  2. Non-Repeatable Reads:
  3. Phantom Reads:

ReadPhenomenaの対処法

ANSIによって定められている4つの分離レベルで解決する。

  1. Read Uncommitted: この分離レベルは最も低く、他のトランザクションによって変更されたがまだコミットされていないデータの読み取りを許可します。Dirty Reads、Non-Repeatable Reads、および Phantom Reads の異常が発生する可能性があり

  2. Read Committed

    この分離レベルは、他のトランザクションがコミットするまでデータの読み取りをブロックします。

    Dirty Readsは防止されますが、Non-Repeatable ReadsとPhantom Readsの異常が発生する可能性があります。

    ブロックするが、データの取得は可能。ただし、更新前のものが取得される。そのため、更新後に同じクエリを実行すると違う結果になる。3を引き起こす。