您的位置:首页技术文章
文章详情页

更新mysql中被别人锁定的行, 能不能快速失败直接报错, 而不是一直等待

【字号: 日期:2022-06-14 14:42:55浏览:38作者:猪猪

问题描述

用户1

begin;select * from table where id = 1 for update;

用户2

update table set ... where id = 1;

用户2就一直在等待, 能不能让用户2快速失败, 直接报错啊

问题解答

回答1:

设置一个超时时间为10s修改my.cnf在[mysqld]下面加入:

innodb_lock_wait_timeout=10

则10s后收到如下错误:(mysql默认50s)

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction回答2:

select for update这种写法会锁表。把数据库等待锁的时间调整一下,可以让用户2快速失败

回答3:

用乐观锁??