MVCC 场景题求解!!!

描述:有A,B两个线程,表里只有一条数据。A线程查询这条数据,B线程再查一次,然后B删除这条数据,B再插入一条新数据,B提交了事务。A对新数据进行删除操作,A再进行查询操作,请问查询出来的是什么?
大家可以帮我讲解一下吗?
#笔试题目#
全部评论
这就是MVCC没有完全解决幻行的地方,其实换个场景更形象一些 1. B插入一条新数据 2. A对这条新数据进行修改 3. A再查询这条新数据,此时A可以查询到B插入的数据 这是因为A修改B插入的新数据之后,这条记录中的trx_id已经变成A的事务id了,因此在A的readview中,可以看到这条新数据。但是按照我们队MVCC的期待,A从始至终都不应该发现这条新数据,所以说MVCC其实并没有完全解决幻行的问题
1 回复 分享
发布于 2021-03-04 07:46
rr级别下 a线程第一次快照读查询产生readview 第二次快照读取还是一次rearview中的数据 。当前读的话直接读取最新的数据
点赞 回复 分享
发布于 2022-02-09 01:24
这个是可重复读的幻读问题,知乎有一个文章复现了这个场景 ,和你说的情况应该是一模一样的https://zhuanlan.zhihu.com/p/109414420 具体的原因是什么我还没研究
点赞 回复 分享
发布于 2021-03-27 22:32
这个文章讲的还可以 是MVCC的 https://zhuanlan.zhihu.com/p/347587789
点赞 回复 分享
发布于 2021-03-04 10:15
当然,以上分析基于rr级别
点赞 回复 分享
发布于 2021-03-04 07:48
按照你对题目的描述,A查出来的只有一条数据
点赞 回复 分享
发布于 2021-03-04 07:46
事务啥时候开始没啥,隔离级别也没说
点赞 回复 分享
发布于 2021-02-08 15:27

相关推荐

评论
点赞
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务