ALTER TABLEによるセッションのロック
MYSQLでトランザクション中のテーブルに対し、ALTER TABLEを実行したらどうなるのか?
試してみたところ、トランザクションを終了するまで、他のセッションをロックしてしまう。
検証パターン
start transaction; select * from test;
②別コンソールを立ち上げて、ALTER TABLEなどを実行。
ALTER TABLE test add column b char(10) default 'b';
③さらに別コンソールを立ち上げて、SELECTを実行。
select * from test;
①でトランザクションを終了するまで、②、③の結果は返らない。
トランザクションの分離レベルを変えてみる
セッションをダーティリードに変更したら、コミット前の変更が別トランザクションから参照できるので、回避できるのでは?と思ったが、試してみた結果は同じ、結果は返らない。
セッション単位でロックしているだろうか?
SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted; select @@tx_isolation; +------------------+ | @@tx_isolation | +------------------+ | READ-UNCOMMITTED | +------------------+ 1 row in set (0.00 sec)