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

收到“超出锁定等待超时;尝试重新启动交易”,即使我没有使用交易

谢涵煦
2023-03-14
问题内容

我正在运行以下MySQL UPDATE语句:

mysql> update customer set account_import_id = 1;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

我没有使用交易,所以为什么会出现此错误?我什至尝试重新启动MySQL服务器,但没有帮助。

该表有406,733行。


问题答案:

您正在使用交易;autocommit不会禁用事务,它只是使它们在语句末尾自动提交。

发生的情况是,某个其他线程在某个记录上保持记录锁定(您正在更新表中的每个记录!)的时间太长,导致您的线程超时。

您可以通过以下方式查看事件的更多详细信息:

SHOW ENGINE INNODB STATUS

事件之后(在sql编辑器中)。理想情况下,请在安静的测试机上执行此操作。



 类似资料:
  • 问题内容: 我正在运行以下MySQL语句: 我没有使用交易,所以为什么会出现此错误?我什至尝试重新启动MySQL服务器,但没有帮助。 该表有406,733行。 问题答案: 您正在使用交易;autocommit不会禁用事务,它只是使它们在语句末尾自动提交。 发生的事情是,某个其他线程在某个记录上保持记录锁定(您正在更新表中的每个记录!)的时间太长,导致您的线程超时。 您可以通过发出 事件发生后(在编

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

  • 问题内容: 从脚本中,我将这样的查询发送了数千次到本地数据库: 我忘了添加where部分,因此同一列为表中的所有行设置了相同的值,并且完成了数千次,并且对该列建立了索引,因此相应的索引可能更新了太多次。 我注意到出了点问题,因为花了太长时间,所以我杀死了脚本。从那以后,我什至重新启动了计算机,但表中有些东西卡住了,因为简单的查询需要很长时间才能运行,并且当我尝试删除相关索引时,它失败并显示以下消息

  • 问题内容: 我的应用程序(java spring-core)有多个线程同时运行并访问数据库,在某些高峰时间出现异常 我的代码看起来 问题答案: MySQL的InnoDB引擎具有行级锁定功能,即使您的代码正在插入或更新单个行(尤其是要更新的表上有多个索引),也可能导致死锁。最好的选择是围绕它设计代码,以便在由于死锁而失败的情况下重试事务。一些有关MySQL死锁诊断的有用信息以及可能的解决方法在此处提

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

  • 问题内容: 更新记录时,我反复出现锁定超时超出异常的情况。 我正在使用Java Struts 2.1 Hibernate配置。使用的数据库是MYSQL。 任何人都知道如何解决它。 问题答案: 这里有一些建议: “ 锁定等待超时 ”通常发生在事务正在等待要更新的数据行上,而该行已被某些其他事务锁定时。 在大多数情况下,问题出在数据库方面。可能的原因可能是表格设计不当,数据量大,约束等。 请查看这个详