异常com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
1.SQL中模糊查询(like、REGEXP)的用法2.SQL中GROUP_CONCAT相关用法3.MYSQL中ORDER BY使用4.MYSQL中 UNION ALL 与 ORDER BY 联合使用5.MYSQL语法6.MYSQL中EXISTS的用法7.MYSQL中JOIN的用法8.SQL优化9.xml使用foreach10.EXPLAIN 详解(SQL优化)11.mysql_存储过程_入门12.SQL中的case when then else end用法(数据库内容纵向变横向)13.MYSQL检索条件区分大小写(CAST、BINARY)14.sql_mode=only_full_group_by以及ANY_VALUE()
15.异常com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
16.MYSQL中SHOW PROCESSLIST使用异常现象
抛出异常:com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
解释:MYSQL事务回滚异常,超过锁等待超时;尝试重新启动事务
原因:执行update的SQL语句时,由于表被锁住,无法更新,导致时间超时;
此时在数据库对当前表进行update语句更新时,会提示:时间超时
当执行一个方法请求到数据库,抛出当前异常时,即使定位到执行的是哪一条SQL语句。确定是哪一张表;
MYSQL中手动执行该update语句时,提示:失败,等待锁超时;
解决方案:
1、查看数据库被锁表的进程,若表被锁住,可以查看到当前锁表的进程信息,若表被一直锁住不释放,则信息会一直存在;
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
2、找到当前锁表的进程ID,即:trx_mysql_thread_id,将其终止
kill 进程ID;
此时当前表会被释放,即可正常进行update操作。
以上只是解决锁表的临时解决方案,并不推荐,应该从造成锁表的原因去调整,避免后续执行方法时也会锁表;
拓展:
1、查看未提交的事务
select * from information_schema.INNODB_TRX;
2、查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
3、查看正在等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
参考:https://blog.csdn.net/lejustdoit/article/details/120276851
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?