error:1205 – Lock wait timeout exceeded; try restarting transaction
起因: 执行一个简单的insert语句失效,具体错误如下:1205 – Lock wait timeout exceeded; try restarting transaction。
这个错误是由于mysql事务没有提交导致锁等待。
解决方案:
1、在Navicat中执行mysql命令:show full processlist;
2、然后找到查询语句的id,kill掉被锁住的线程id
3、查看事务表:select * from information_schema.innodb_trx;
show full processlist;
一、介绍一下每个属性
id 很容易就猜到是这个连接的id,值对应这个连接使用的线程id。
User用户名
Host 连接的地址和端口,那么你可能会问,为什么我贴的例子的地址都是同一个host呢,很明显是用了代理,感兴趣的可以看看这篇文章http://www.phpv.net/html/1583.html,这里就不详细解释了。
db 此连接所连接使用的数据库名。
command 一般有俩值:sleep和query,从字面意思就可以看出,一个是处理睡眠状态,就是处于连接状态,但是没有正在执行任何sql语句,Query代表正在执行sql语句。
Time 连接的时间。
State 我个人觉得应该是当前线程的状态吧。
info 代表正在执行的sql,如果command为sleep时,它为空。
那如果我们遇到一个sql要执行很长时间,但是我们又不想让它继续执行了,怎么办呢?既然每个连接是在一个线程里维护,这个线程是否可以删除呢?我们尝试杀掉15814这个线程
kill 15814;