【MySQL】 INSERT後すぐに別プロセスでSELECTするとデータが取得できない?
問題
MYSQL 5.1.49 、MyISAM なテーブルで、プロセスAがINSERT実行後、プロセスBがAが登録したレコードをすぐにSELECTしようとすると、取得できない現象が発生するのですが、そういうものですか。
答え
MyISAMだとありうるのかもしれないです。
MS Access でも似たような現象にあったことがあります。
問題のタイミングでプロセスBで SHOW PROCESSLIST すると、プロセスAは実行中っぽい(freeing items)。
対策するとしたら、以下のような案が考えられる。
・プロセスAが明示的にテーブルロック、INSERT、ロック解除ののちに、プロセスBを実行
・プロセスAが接続をCLOSEまでしてから、プロセスBを実行
・プロセスAがINSERT後に、SELECT 1; でもなんでも実行して、それからプロセスBを実行
・MyISAM特有の現象のようなので、対象のテーブルをInnoDBにする
バグといってよいものなのか、そういうものとして注意するべきなのか、何とも言えない現象のメモでした。
コメント