SOFTELメモ Developer's blog

【MySQL】 INSERT後すぐに別プロセスでSELECTするとデータが取得できない?

2015/09/29 MySQL

問題

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にする

バグといってよいものなのか、そういうものとして注意するべきなのか、何とも言えない現象のメモでした。

関連するメモ

コメント