PostgreSQLとMySQLのトランザクション分離レベルの変更方法
RDBに全く興味が無い中、PostgreSQLとMySQLといじる羽目になっていて、なかなか辛いのです。
しかもこのあとにSQLServerとOracleが待っているので、それを考えると鬱々真っ盛りになる予感です。
とりあえず分離レベルの設定方法のメモメモ。
PostgreSQL
確認
SHOW TRANSACTION ISOLATION LEVEL;
変更
SET TRANSACTION ISOLATION LEVEL [READ COMMITTED | SERIALIZABLE]; -- とりあえず今回必要になったやつだけ
でもSERIALIZABLEはこの一文だけだと何故か有効にならなくて、
START TRANSACTION; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SHOW TRANSACTION ISOLATION LEVEL; COMMIT; -- or ROLLBACK;
って書いてあげたらちゃんとSERIALIZABLEになった。トランザクション中じゃないと変わらないとか、そういう仕様なのかな?
MySQL
確認
SELECT @@global.tx_isolation; -- global SELECT @@tx_isolation; -- session
設定
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL [READ COMMITTED | SERIALIZABLE];
設定方法は他にもあるみたいで、Windowsならmy.iniに(他のOSは知らない…… どこに書くんだろう?)
[mysqld] transaction-isolation = [READ-COMMITTED | SERIALIZABLE]
って書いてあげるといいみたい?