使用Mybaits对数据库操作时 出现 “Lock wait timeout exceeded; try restarting transaction”

刚开始学MyBatis+servlet时,每次启动servers我调用更新数据的函数都没成功,先是等好一会,最后结果还是报错。
在这里插入图片描述
起初我以为错误是出现在项目中,但是通过测试不是我写的逻辑或者语法有问题,百度后发现问题出现在了数据库中
查看数据库进程:show processlist;
然后查看正在执行的事务:select * from information_schema.INNODB_TRX;
会发现这里有两条数据,如果对数据正常操作的话是没有数据的
在这里插入图片描述
注意看第一条,会发现里面try_query列存放的是我们需要执行的值,但是它的状态trx_state显示的是lock wait 锁住等待,当然是等待它下面那条正在执行的语句了,但是你会发现那条running中的数据除了该事务的开始时间以外,其他全是空的,所以他就一直卡在那里了,导致这条数据出现的原因是因为我们使用编译器run Tomcat 时产生的一个错误
在这里插入图片描述
假如你直接从编译器里面启动,如果你第一次启动没有将数据库里面的非空字段的值传过去,它就会报这个错误,但是这个事务被提交到数据库进程里面了,以致于后面的事务都得等这个事务提交完成。

要想让后面的数据可以执行,得手动Kill掉这个进程,在数据库中直接Kill 这个事务对应的进程ID就可以继续执行我们想要的数据了,为了预防继续出现事务锁的出现,我们尽可能不要直接从编译器中进行run,启动Tomcat后在浏览器中执行即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值