爱程序网

mysql中,执行delete语句时出现Lock wait timeout exceeded问题

来源: 阅读:

问题描述:

当我插入一条记录时,在调用save方法的时候出现了异常(记录重复了),导致了后面的commit语句不能执行了。这时我在数据库中删除重复记录时发现该表已经被锁上了。即出现错误。但过了一会再次执行delete,就能成功删除记录了。

原因分析:

由于commit语句没有执行到,即事务没有提交成功,表还是被锁着的。只能等锁超时了,才能再次执行delete等操作。

解决办法:

1.遇到问题后可以kill掉对应的线程再次执行delete等操作。

2.为避免问题出现,可以开启mysql中的autocommit功能,将其值set为1。但这样的话会影响性能,因为执行1000条sql语句则要commit1000次。关闭的话,通过程序控制,1000条sql语句可以只commit一次。

3.不去改autocommit的话,也可以将commit放在finally语句块中。保证一定执行commit方法。

 

相关文章列表:
关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助