MySQL共享锁疑难:同一事务内能修改已加共享锁的行吗?

mysql共享锁疑难:同一事务内能修改已加共享锁的行吗?

MySQL共享锁的特性:同一事务内的读写操作

本文分析MySQL共享锁在一个特定场景下允许数据修改的原因,解释为什么在同一事务中,获取共享锁后仍然可以执行更新操作。

问题:

以下代码片段显示,获取共享锁后,后续更新操作成功执行,这与共享锁的常规理解(允许多个事务读取,但禁止修改)似乎矛盾。

begin;select size from app where id = 1 lock in share mode; -- 获取共享锁update app set size = size + 1 where id = 1; -- 为什么能成功?commit;

登录后复制

通常认为,select … lock in share mode语句会为app表中id=1的行添加共享锁,阻止其他事务修改该行。然而,同一事务中的后续update语句却成功执行了。

解答:

关键在于,共享锁的机制针对的是不同事务。lock in share mode获取的共享锁只阻止其他不同事务修改该行。在同一事务内,共享锁不会阻止自身对已加锁行的修改。 因为事务自身已持有该行的共享锁,拥有访问权限,所以允许读写操作。 这并非共享锁定义与实际情况不符,而是对共享锁作用范围的误解。共享锁协调不同事务间的并发访问,确保数据一致性,而非限制同一事务内的操作。

以上就是MySQL共享锁疑难:同一事务内能修改已加共享锁的行吗?的详细内容,更多请关注【创想鸟】其它相关文章!

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

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

(0)
上一篇 2025年3月6日 01:06:24
下一篇 2025年2月19日 02:02:51

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

相关推荐

发表回复

登录后才能评论