当前位置: 首页 > 面试题库 >

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

帅煌
2023-03-14
问题内容

我正在尝试更新Time_Stamp表中的字段simple_pack_data,以匹配temp_data表中标题相似的字段中的值。每个表都有一个称为Test_Number和的字段Time_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";

它花费的时间不到一秒钟,而且我知道join可以正常工作。更新真的花了这么长时间吗?如果是这样,是否有任何方法可以更改超时值以便它可以通过?


问题答案:

这个错误完全是MySQL并没有尽其所能。最好的解决方案是摆脱MySQL,但由于缺乏这种能力,因此该性能博客文章过去已帮助我解决了这一问题。

MySQL有很多这些小陷阱。就像在Access中工作一样,程序有一半时间会做错事而不引发错误。



 类似资料:
  • 我非常清楚这个问题可以通过禁用安全更新模式来解决(例如,请参见此处:在MySQL工作台中更新期间的MySQL错误代码:1175)。但是,我不希望禁用安全更新模式(有很多很多解决方案提出了这一点)。 类似地,我知道将WHERE子句设置为匹配所有内容的KEY-value应该会起作用。但在mysql-workbench上似乎并不起作用--至少不是我希望的那样(或它在控制台上的工作方式)。 例如,以下操作

  • 这是我的servlet的doPost方法,理论上它在db中添加数据 这里是在db中插入数据的方法 但是,当我尝试使用servlet执行此操作时,出现了以下错误 错误1205(HY000):超出锁定等待超时; 有人知道如何解决?如果我对一个普通的java类做同样的事情,那么一切都很好。

  • 问题内容: 我不知道是什么问题。使用MySQL 5.0尝试运行以下MYSQL更新语句时出现编译错误 所有字段名称都是正确的。有什么想法吗? 问题答案: 尝试这个: 更新: 既然您说查询产生了语法错误,所以我创建了一些可以对其进行测试的表,并确认查询中没有语法错误: 看到?没有语法错误。我针对MySQL 5.5.8进行了测试。

  • 问题内容: 我正在使用Hibernate,试图模拟2个并发更新到数据库中的同一行。 编辑:我将em1.getTransaction()。commit移到em1.flush()之后;我没有收到任何StaleObjectException,两个事务已成功提交。 我在上遇到以下异常。为什么? 问题答案: 好吧,您正试图陷入僵局,并且成功了:-) Transaction1开始,与您的实体更新(和锁定)行。

  • 我试图从交易编号相同的<code>包 错误代码:1175。您使用的是安全更新模式,并且您试图更新一个没有WHERE的表,该表使用了键列。要禁用安全模式,请在首选项中切换该选项- 下面是命令: 我认为我正在使用一个,其中使用了一个键列(< code>transactionNo是< code>Payment的主键)。我是不是写错了?

  • 当我转换为maven项目时,错误是: 有什么问题吗?