如下所示,我查询一条记录,然后主动上锁,但是总是失败,为什么?
没有其它会话。
隔离级别是默认的 repeatable-read
mysql> select * from account where id = 5;
+----+-----------+---------+
| id | NAME | balance |
+----+-----------+---------+
| 5 | zhangsang | 1000.00 |
+----+-----------+---------+
1 row in set (0.00 sec)
mysql> select * from account where id = 5 for update;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
其实你可以直接搜这个报错,翻译过来: ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction。
一般都是锁争用引起的,查查数据库线程情况,看下里面是否有正在锁定的事务线程,把它干掉。
好像是锁超时了吧
检查下 这个表 已经存在的锁,是不是你的这个 id=5 的记录已经被锁住了。
Mysql数据库采用InnoDB模式,默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,一旦数据库锁超过这个时间就会报错。
from https://www.cnblogs.com/yshyee/p/10668943.html