MySQL错误代码:1205.使用内部联接更新期间锁定等待超时

eh_*_*ver 7 mysql sql mysql-workbench mysql-error-1205

我正在尝试更新Time_Stamp表格中的字段simple_pack_data,以匹配表格中类似标题字段中的值temp_data.每个表有三个字段Test_NumberTime_Marker,我使用到INNER JOIN表.Time_Marker就像一个读数,Time_Stamp从测试开始的实际时间.

我想一次更新Time_Stamp一个测试,所以我一直在尝试的代码是:

UPDATE simple_pack_data s
INNER JOIN (
    SELECT *
    FROM temp_data t
    WHERE t.Test = "3"
    ) AS tmp
ON s.Test_Number = tmp.Test_Number AND s.Time_Marker = tmp.Time_Marker
SET s.Time_Stamp = tmp.Time_Stamp
WHERE s.Test_Number = "3";
Run Code Online (Sandbox Code Playgroud)

当我运行它需要超过50秒,我得到1205错误.如果我运行类似结构的select语句:

SELECT *
FROM simple_pack_data s
INNER JOIN (
    SELECT *
    FROM temp_data t
    WHERE t.Test = "3"
    ) AS tmp
ON s.Test_Number = tmp.Test AND s.Time_Marker = tmp.Time_Marker
WHERE s.Test_Number = "3";
Run Code Online (Sandbox Code Playgroud)

它需要不到一秒钟,我知道加入工作正常.更新确实需要这么长时间吗?如果是这样,有没有办法改变超时值,以便它可以通过它?

Wen*_*del 6

尝试查看您的 MySQL 服务器是否有正在运行的进程。

要查看这一点,请在 MySQL 客户端上运行命令:

SHOW FULL PROCESSLIST;
Run Code Online (Sandbox Code Playgroud)

查看idstateinfo列并分析问题。发现问题后,使用以下命令终止进程:

KILL <PROCESS ID>;
Run Code Online (Sandbox Code Playgroud)


Twe*_*fth 3

这个错误完全是MySQL没有做它应该做的事情。最好的解决方案是摆脱 MySQL,但由于缺乏这种能力,这篇性能博客文章过去帮助我解决了这个问题。

MySQL 有很多这样的小问题。这就像在 Access 中工作一样,有一半的时间程序会做错误的事情,但不会引发错误。

  • 奇怪的是这个答案得到了多少一致的反对票。肯定有一些 MySQL 的忠实拥护者。 (4认同)