登录
首页 >  数据库 >  MySQL

MySQL MVCC下,UPDATE后SELECT为何能读到已提交数据?

时间:2024-11-07 08:48:42 182浏览 收藏

从现在开始,努力学习吧!本文《MySQL MVCC下,UPDATE后SELECT为何能读到已提交数据?》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

MySQL MVCC下,UPDATE后SELECT为何能读到已提交数据?

MVVC隔离级别下,SELECT为什么在UPDATE后可以读到?

在MySQL事务隔离级别为MVCC时,事务A执行UPDATE操作后,事务B执行SELECT操作,一般情况下,B是读不到A更新的数据的。但有一个例外的情况是,B可以读到A在UPDATE操作提交后写入的数据。

原因分析:

MVVC的读操作会基于事务ID生成一个快照,并按照如下规则查找数据:

  • 规则1: 按事务ID和快照读区间查找数据,如果找到目标数据,则返回。
  • 规则2: 如果规则1没有找到目标数据,则按普通方式在当前数据集中查找目标数据,如果找到目标数据,则返回。

在问题描述的场景中,事务A的UPDATE语句提交后,id=5的数据已被写入,满足规则1的条件。因此,第二次SELECT操作可以通过规则1找到id=5的数据。

由此可见,虽然MVVC隔离级别下快照读一般不能立即读取UPDATE之后的数据,但如果UPDATE操作已提交,则后续SELECT操作可以根据上述规则1读取到更新后的数据。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于数据库的相关知识,也可关注golang学习网公众号。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>