【MySQL】insert ~ select ~ でロックのかかる例
問題
あるテーブルのデータを delete しようとしているのですが、ロック待ちのタイムアウトになります。
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
答え
以下のような状況では発生する。
・接続1
mysql> start transaction; Query OK, 0 rows affected (0.00 sec) mysql> insert into a select ~~~ from b where ~~; Query OK, 1 row affected, 2 warnings (0.06 sec) Records: 1 Duplicates: 0 Warnings: 1 mysql>
・接続2
mysql> delete from b where ~~; ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction mysql>
なお、接続1のinsert select の where も、接続2のdeleteのwhereもプライマリキーなどを指定していれば、接続2は待たされない様子。
コメント