本日は、MySQL Casual Advent Calendar 2013の20日目である。というわけでカジュアルに小ネタを紹介しよう。 MVCC - Multi Version Concurrency Controlご存知の通り、InnoDBはMVCCを実装している。そのため、分離レベルがREPEATABLE READの場合には、行にロックをかけることなく、一貫した読み取りが可能になっている。 もし、あるトランザクションT1開始後に、別のトランザクションT2によって同じ行が書き換えられてしまった場合には、T1はロールバックセグメントにある古いバージョンの値を読み取ることができるので、T1内で実行したSELECTは常にT1開始時点のデータを参照することができるのである。大事なのでもう一度言うが、REPEATABLE READにおける単純なSELECTでは行ロックは必要ない。 Lost Up
![InnoDBのREPEATABLE READにおけるLocking Readについての注意点](https://cdn-ak-scissors.b.st-hatena.com/image/square/1946584c1109fd113f49a62abe33b19ded268448/height=288;version=1;width=512/https%3A%2F%2Flh6.googleusercontent.com%2F-Om_IligLd5c%2FTTT9MTGM31I%2FAAAAAAAAAfw%2FABg9hRZifTo%2Fs800%2Flogo.png)