问题出现原因
项目中某个表的数据太多而且无效,影响用户使用体验,计划用sql语句进行删除,然后手写sql进行删除数据操作,之后发现这个sql执行的时间比较长,然后进行停止操作。之后就出现了关联表被锁的现象,导致程序执行update操作报错。
解决办法
重启数据库(不推荐)当时项目还在生产运行,出现这个问题也比较棘手,当时拿着报错去百度,没找到立即解决的办法。无奈只能尝试重启数据库的方式来解决问题。- 通过查看数据库锁情况来kill进程来解决问题。这个是在问题解决后,尝试再找到另一种方式来合理的解决问题。首先用sql查询一下数据库情况,
SHOW PROCESSLIST;
运行结果为如下
如果State列内容中有lock状态,那么通过Info列就可以得出哪张表被锁了,如果有被锁的表,那么在命令行输入(kill 后面的id是上图的第一列值)Kill 进程id
,如果出现了多个被锁的表就一个一个进行kill。
总结
以上的解决方式当时我使用的是第一种,第二种是在百度中找到的,没有使用过,不过还是推荐第二种方式。