ネクストキーロックとは
MySQLのネクストキーロック(Next-Key Lock)は、InnoDBストレージエンジンが使用するロックの一種で、トランザクション処理中のデータの整合性を保つために使用されます。これは、行レベルのロックとギャップロックの組み合わせであり、特定の範囲のレコードに対する他のトランザクションによる挿入を防ぐことが目的です。
ファントムリードとは
トランザクションAで一定範囲のレコードに対して処理を行っている途中で、トランザクションBでデータを追加・削除してコミットした場合、トランザクションAで幻影のようにデータが反映されるため、処理の結果が変わってしまう問題のこと。
Repeatable Readのファントムリード
ANSI/ISO SQL標準で定められている分離レベルではリピータブルリードの場合はファントムリードが発生しうる分離レベルとなっている。MySQLのinndbにおいてはこれが発生しない。これは上述しているネクストキーロックの仕組みで実現されている。トランザクションAが処理中にGapとネクストキーをロックしてしまうことでそもそも更新が発生しない。この分離レベルはアカデミックな分野でいうRepeatable Readではない。Snapshot Isolationとかその辺の単語で調べると多くヒットして理解がしやすい。