MVCC 场景题求解!!!

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

相关推荐

点赞 11 评论
分享
牛客网
牛客企业服务