MySQLのトランザクション分離レベルはInnoDBならデフォルトのREPEATABLE READで問題ない
MySQL :: MySQL 5.1 リファレンスマニュアル :: 13.5.10.3 InnoDB と TRANSACTION ISOLATION LEVEL
MySQLでトランザクションの4つの分離レベルを試す - FAT47の底辺インフラ議事録
きょうのガッテン:
- select @@tx_isolation;でトランザクションの分離レベル確認
長所短所あるけど、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が返る