Lock wait timeout exceeded; try restarting transaction

Lock wait timeout exceeded; try restarting transaction 是 MySQL 数据库中一个常见的错误信息,它表示当前事务等待加锁的操作超时了,因为锁被其他事务占用,导致无法获取锁。这里有多种情况会导致表锁,例如使用锁表语句:LOCK TABLES...

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解决所有的不痛快……

本文标题为:Lock wait timeout exceeded; try restarting transaction