読者です 読者をやめる 読者になる 読者になる

パルカワ2

PerlとRubyとイチャラブ

存在しないデータにselect ... for updateしたあと、insertしようとしたら、デッドロックしちゃってつらい。

mysql> start transaction;
# 存在しないuniq制限ありなデータにfor update
mysql> select * from hoge where piyo_id = 1 and fuga_id = 1 for update; 
mysql> insert into hoge (piyo_id, fuga_id) value (1,1);

をAとB交互にしたら、Aでinsertするとき待ちが発生して、BでinsertするとDeadlock found when trying to get lock;と言われてしまい、その代わりAのinsertは成功するっぽい。イヤーンって感じです。

Server version: 5.5.16 MySQL Community Server (GPL)

fujiwaraさんに教えてもらった参考URL: http://d.hatena.ne.jp/jflute/20120831/1346393321