Repeatable Read
Repeatable Read はダーティリードと非再現リードを防ぐ。トランザクション内で同じ行を複数回読んでも同一の結果が返るが、ファントムリードは依然として起こりうる。
目的
Read Committed より強い一貫性を提供し、トランザクション内で安定した読み取りを保証する。
メカニズム
初回読み取り時にトランザクションが行をロックするかスナップショット版を固定し、以後の同じ行の読み取りは同一の値を返す。ただし範囲クエリでは、他のトランザクションが挿入すれば行が増える可能性がある(ファントムリード)。MySQL InnoDB はネクストキーロックでファントムを防ぐ。
ユースケース
- トランザクション内の一貫した読み取り
- 分離レベルの選択
- ファントムリードの解析