地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【MySQL】ネクストキーロックとファントムリード

ネクスキーロックとは

MySQLネクスキーロック(Next-Key Lock)は、InnoDBストレージエンジンが使用するロックの一種で、トランザクション処理中のデータの整合性を保つために使用されます。これは、行レベルのロックとギャップロックの組み合わせであり、特定の範囲のレコードに対する他のトランザクションによる挿入を防ぐことが目的です。

softwarenote.info

ファントムリードとは

トランザクションAで一定範囲のレコードに対して処理を行っている途中で、トランザクションBでデータを追加・削除してコミットした場合、トランザクションAで幻影のようにデータが反映されるため、処理の結果が変わってしまう問題のこと。

Repeatable Readのファントムリード

ANSI/ISO SQL標準で定められている分離レベルではリピータブルリードの場合はファントムリードが発生しうる分離レベルとなっている。MySQLのinndbにおいてはこれが発生しない。これは上述しているネクスキーロックの仕組みで実現されている。トランザクションAが処理中にGapとネクストキーをロックしてしまうことでそもそも更新が発生しない。この分離レベルはアカデミックな分野でいうRepeatable Readではない。Snapshot Isolationとかその辺の単語で調べると多くヒットして理解がしやすい。

ja.wikipedia.org

qiita.com

www.infoq.com