MySQL メモ4 ACID特性
ACID特性
MySQLに限らずその他のRDBMSでも、トランザクション処理に求める要件をACID特性と呼ばれる。
InnoDBストレージエンジンはACIDに準拠した設計になっている。
- "A" Atomicity(原子性)
トランザクション内での処理がすべて実行されるか、すべて実行されないかを保証すること。コミットされるかロールバックされるのかのどっちかとなる。一部の処理だけが実行されることがないよにしている。
- "C" Consistency(一貫性)
DBのルール、整合性に合わない処理が発生した場合に、そのトランザクションの実行は中止となる。
- "I" Isolation(独立性)
複数のトランザクションが実行中の場合に、各トランザクションは他のトランザクションへ影響を与えない、受けない独立性を持つこと。
- "D" Durability(永続性)
トランザクション処理が実行された結果は、データベースから失われないこと。
トランザクション分離レベル
ACID特性の中の独立性(Isolation)を、どれほどの独立性レベルで実行するかを定義したレベルをトランザクション分離レベルと呼ばれる。
分離レベルはANSI/ISO SQL標準で定められてるため、MySQL以外でも使われている。
分離レベル
ダーティーリード | ファジーリード | ファントムリード | ロストアップデート | 備考 | |
---|---|---|---|---|---|
READ UNCOMMITTED | 発生 | 発生 | 発生 | 発生 | あまり使われることはないらしい。 |
READ COMMITTED | 起きない | 発生 | 発生 | 発生 | PostgreSQL、Oracle、SQL Serverでデフォルトの設定 |
REPEATABLE READ | 起きない | 起きない | 発生 | 発生 | MySQLのデフォルト設定 |
SERIALIZABLE | 起きない | 起きない | 起きない | 起きない | あまり使われることはないらしい。 |
ファジーリード
コミットしていない変更(update)は他のトランザクションからは見えない。ただし、トランザクションの途中で、他のトランザクションがコミットした変更(update)は見えてしまう事象。