SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【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は待たされない様子。

関連するメモ

コメント