mysql 里 非事务的 update 语句,会自动加排它锁吗

2021-02-05 23:39:48 +08:00
 zxCoder

没查到相关资料

是我理解错了吗

大多数书 教程都说的是事务的情况

然后在事务中,到底要不要手动写 FOR UPDATE 或 LOCK IN SHARE MODE 来加锁呢?还是说 mysql 会自动根据查询语句的类别来加锁?

1206 次点击
所在节点    问与答
4 条回复
louettagfh
2021-02-06 09:40:49 +08:00
你是指没有显式的 begin 吗?

update 语句依然需要排它锁.

事务中写不写 FOR UPDATE 和 LOCK IN SHARE MODE 取决于你的需求啊.
zxCoder
2021-02-06 09:59:32 +08:00
@louettagfh 对 就是没有显式的开启事务,这时候 update 会自动当做一个事务吗?
所以事务中其实是不会自动加锁的吗?必须自己手动显式加锁?(对于 innodb )
lizuoqiang
2021-02-06 11:42:59 +08:00
session 1:
#关闭自动提交
set autocommit = 'OFF';
#更新一条记录
update author set name = 'first_new' where id = 1;

session 2:
#关闭自动提交
set autocommit = 'OFF';
#更新一条记录
update author set name = 'first_new_2' where id = 1;

session2 会等待 session1 的锁释放而导致超时

所以一般的事物不需要显示的加锁
louettagfh
2021-02-06 19:15:15 +08:00
@zxCoder 针对 SELECT 当然是取决于你的语句来决定加什么锁.

Update 即修改 record 是自动加锁的, 你不需要做任何处理.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/751707

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX