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

时间:2013-10-18 20:59:47

标签: mysql sql mysql-workbench mysql-error-1205

我正在尝试更新表Time_Stamp中的simple_pack_data字段,以匹配temp_data表中类似标题字段中的值。每个表都有一个名为Test_NumberTime_Marker的字段,我将其用于表INNER JOINTime_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";

当我运行它时需要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";

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

2 个答案:

答案 0 :(得分:4)

这个错误完全是MySQL没有做到的。最好的解决方案是脱离MySQL,但缺乏这种能力,这performance blog post帮助我解决了这个问题。

MySQL有很多这些小问题。这就像在Access中工作一样,程序执行错误的一半时间并没有引发错误。

答案 1 :(得分:0)

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

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

SHOW FULL PROCESSLIST;

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

KILL <PROCESS ID>;