読者です 読者をやめる 読者になる 読者になる

MySQLのトランザクション分離レベルはInnoDBならデフォルトのREPEATABLE READで問題ない

MySQL :: MySQL 5.1 リファレンスマニュアル :: 13.5.10.3 InnoDB と TRANSACTION ISOLATION LEVEL
MySQLでトランザクションの4つの分離レベルを試す - FAT47の底辺インフラ議事録

きょうのガッテン:

長所短所あるけど、InnoDBならREPEATABLE READの短所のファジーリード発生しないので、細かいこと気にしないで、デフォルトのREPEATABLE READでよい。

あとは、下の挙動だけ理解しておけばとりあえずいいかな。

一貫した読み取りの中に、READ COMMITTED 分離レベルとの重要な違いがあります:同一トランザクション内の全ての一貫した読み取りは、最初の読み取りで確立された同じスナップショットを読み取ります。このしきたりは、もし同じトランザクション内でいくつかの単純な SELECT ステートメントを発行すると、これらの SELECT ステートメントはお互いに対しても一貫性を持つという事を意味します。

要は、同一トランザクション内で更新した内容は、コミットする前にトランザクション内で参照しても、更新されてないってことか。

select @@tx_isolation; # REPEATABLE READ  



#トランザクションスタート

SELECT test_col FROM test_t WHERE id = 1; #9が返る

UPDATE test_t SET test_col = 10 WHERE id = 1;

SELECT test_col FROM test_t WHERE id = 1; #★10ではなく、9が返る★

#コミット

SELECT test_col FROM test_t WHERE id = 1; #10が返る