Lock wait timeout exceeded; try restarting transaction
Lock wait timeout exceeded; try restarting transaction 是 MySQL 数据库中一个常见的错误信息,它表示当前事务等待加锁的操作超时了,因为锁被其他事务占用,导致无法获取锁。这里有多种情况会导致表锁,例如使用锁表语句:LOCK TABLES stat_num WRITE,
或者使用了悲观锁但不提交事务,那么这里就会一直锁住这些行,那么你对表进行操作的时候就会告诉你当前事务还没有结束。
BEGIN;
SELECT * FROM user WHERE age>2 FOR UPDATE;
那么怎么解决这个问题呢,简单粗暴的办法,把这张表的锁释放表,不需要网上其他教程那么多花里胡哨的查锁,释放某个锁,这对于不同版本的数据库是不通用的。
UNLOCK TABLES;
一行SQL解决所有的不痛快……