
MVVC隔离级别下,SELECT%ignore_a_1%在UPDATE后可以读到?
在MySQL事务隔离级别为MVCC时,事务A执行UPDATE操作后,事务B执行SELECT操作,一般情况下,B是读不到A更新的数据的。但有一个例外的情况是,B可以读到A在UPDATE操作提交后写入的数据。
原因分析:
MVVC的读操作会基于事务ID生成一个快照,并按照如下规则查找数据:
智谱AI开放平台
智谱AI大模型开放平台-新一代国产自主通用AI开放平台
85 查看详情
规则1: 按事务ID和快照读区间查找数据,如果找到目标数据,则返回。规则2: 如果规则1没有找到目标数据,则按普通方式在当前数据集中查找目标数据,如果找到目标数据,则返回。
在问题描述的场景中,事务A的UPDATE语句提交后,id=5的数据已被写入,满足规则1的条件。因此,第二次SELECT操作可以通过规则1找到id=5的数据。
由此可见,虽然MVVC隔离级别下快照读一般不能立即读取UPDATE之后的数据,但如果UPDATE操作已提交,则后续SELECT操作可以根据上述规则1读取到更新后的数据。
以上就是MySQL MVCC下,UPDATE后SELECT为何能读到已提交数据?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/737899.html
微信扫一扫
支付宝扫一扫