MYSQLのデフォルトのトランザクション分離レベルは REPEATABLE READです。 REPEATABLE READにおいてもファントムリードが起こることは 避けられませんが、MySQLのREPEATABLE READでは、 MVCCを採用しているため、ファントムリードは起こりません。 MVCCにおいてはよく「トランザクション毎にスナップショットを作成し、それを 参照することで他のトランザクションからの干渉を受けない」といった説明がされます。 スナップショットという表現のため、我々はトランザクションが始まるたびに、 そのトランザクションが扱うテーブルのメモリコピーをいちいち作成するような イメージを受けますが、実はそのようなスナップショットという表現のイメージと 実装は異なっています。 MVCC とは MVCC(MultiVersion Concurrency Control)という
![REPEATABLE READをスナップショットという言葉使って語るのは今すぐやめるべき - まるまるこふこふ](https://cdn-ak-scissors.b.st-hatena.com/image/square/06a15c64ba0ceec233d86d71001ebb29a9dcbf5d/height=288;version=1;width=512/https%3A%2F%2Fcdn.blog.st-hatena.com%2Fimages%2Ftheme%2Fog-image-1500.png)