我们使用 MariaDB 10.1.19 托管旧数据库。我们有一个lpr
表(在 InnoDB 上),我们想在其中从文本列移动gate
到规范化外键gate_id
。我们的代码并行执行 UPDATE,如下所示:
UPDATE lpr SET gate_id=1 WHERE gate_id IS null AND gate LIKE '%[1]%'
UPDATE lpr SET gate_id=2 WHERE gate_id IS null AND gate LIKE '%[2]%'
UPDATE lpr SET gate_id=3 WHERE gate_id IS null AND gate LIKE '%[3]%'
UPDATE lpr SET gate_id=4 WHERE gate_id IS null AND gate LIKE '%[4]%'
...
Run Code Online (Sandbox Code Playgroud)
由于受所有 UPDATE 影响的行是不相交的,并且表位于 InnoDB 上,我们不会期望锁争用,但我们得到错误:
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
对于所有更新。提高innodb_lock_wait_timeout
到100〜并不能改变什么,以及设置 …