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

tx

  • ACID特性

  • 排他制御

  • Dirty Read: コミット前のデータを他txが読み取ってしまう

  • Fuzzy Read, Non-Repeatable Read: 複数回データ読み取るときに書き換わり違う結果を読み込んでしまう

  • Phantom Read: tx Aで範囲のレコードに対して処理を行っている最中に他のtx Bで変更(追加)したときにAにもデータが反映されてしまう

  • Serializable: 読み取る全ての行に共有ロックをかける = 性能低下

  • READ UNCOMMITTED: o o o

  • READ COMMITED: x o o (Oracle, Postgresデフォルトの分離レベル)

  • REPEATABLE READ: x x o (MySQL)

  • SRIALIZABLE: x x x

参考文献