うまいぼうぶろぐ

linuxとhttpdとperlのメモ

mysqlのトランザクション分離レベル おさらい

mysqlではANSI/ISO SQLで定められている基準より堅牢?になっていて、InnoDBではREAD COMMITEDでNON REPEATABLE READが発生しない。またREPEATABLE READでファントムリードが発生しない、とのこと。

mysqlの設定

  • my.cnf
[mysqld]
transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED
                       | REPEATABLE-READ | SERIALIZABLE}

InnoDBのdefaultはREPEATABLE READ

  • 一時的な設定
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL
                     {READ UNCOMMITTED | READ COMMITTED
                      | REPEATABLE READ | SERIALIZABLE}
  • 確認
SELECT @@global.tx_isolation;
SELECT @@tx_isolation;


ちなみにpostgresqlのdefaultはたしかread committedだったかな。