MySQL共享锁:同一个事务内获取共享锁后还能修改数据吗?

mysql共享锁:同一个事务内获取共享锁后还能修改数据吗?

深入解析MySQL共享锁的特性

MySQL共享锁的机制常常让开发者感到困惑。本文将深入探讨一个常见问题:为何同一个事务在获取共享锁后,仍然可以修改数据?

问题描述:一段代码使用SELECT … LOCK IN SHARE MODE语句获取共享锁,随后尝试修改同一行数据,修改操作竟然成功了。这与共享锁的定义(允许多个事务读取,但阻止任何事务修改)似乎矛盾。

代码示例:

BEGIN;SELECT size FROM app WHERE id = 1 LOCK IN SHARE MODE; -- 获取共享锁UPDATE app SET size = size + 1 WHERE id = 1; -- 为什么能成功?COMMIT;

登录后复制

许多人误认为共享锁是排他锁。实际上,共享锁仅阻止其他事务修改(X锁)该行数据。关键在于,同一个事务内部不受共享锁限制。 SELECT … LOCK IN SHARE MODE 获取的是针对其他事务的共享锁,它只阻止其他事务写入。但当前事务不受此锁约束,可以自由读取和修改已加锁的数据行。因此,UPDATE语句成功执行,是因为它在同一事务中操作。如果另一个事务尝试更新id=1的行,则会阻塞,直到第一个事务提交或回滚。

因此,共享锁的“共享”针对的是不同事务,而非同一事务内的操作。 它不阻止同一事务内的数据修改。

以上就是MySQL共享锁:同一个事务内获取共享锁后还能修改数据吗?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2539531.html

(0)
上一篇 2025年3月6日 01:07:05
下一篇 2025年2月18日 04:04:07

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论