首页 新闻 搜索 专区 学院

mysql数据库,为什么无法执行for update?

0
悬赏园豆:5 [已解决问题] 解决于 2021-11-02 11:02

如下所示,我查询一条记录,然后主动上锁,但是总是失败,为什么?
没有其它会话。
隔离级别是默认的 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
liaowenxiong的主页 liaowenxiong | 初学一级 | 园豆:115
提问于:2021-10-14 16:41
< >
分享
最佳答案
1

其实你可以直接搜这个报错,翻译过来: ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction。
一般都是锁争用引起的,查查数据库线程情况,看下里面是否有正在锁定的事务线程,把它干掉。

收获园豆:5
素手揽清风 | 菜鸟二级 |园豆:219 | 2021-10-15 17:37
其他回答(2)
0

好像是锁超时了吧

茉莉` | 园豆:209 (菜鸟二级) | 2021-10-14 17:51
1

检查下 这个表 已经存在的锁,是不是你的这个 id=5 的记录已经被锁住了。

Mysql数据库采用InnoDB模式,默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,一旦数据库锁超过这个时间就会报错。
from https://www.cnblogs.com/yshyee/p/10668943.html

快乐的凡人721 | 园豆:1368 (小虾三级) | 2021-10-14 18:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册