rqxiao 最近的时间轴更新
rqxiao

rqxiao

V2EX 第 422752 号会员,加入于 2019-06-18 14:27:34 +08:00
招聘软件上有些岗位挂了几个月是什么个情况
职场话题  •  rqxiao  •  54 天前  •  最后回复来自 jookr
18
使用 ffmpeg 用 aes 加密 m3u8 文件的疑惑
FFmpeg  •  rqxiao  •  61 天前  •  最后回复来自 8355
7
想尝试外企的求职机会,有哪些渠道
职场话题  •  rqxiao  •  68 天前  •  最后回复来自 nevadax
3
rqxiao 最近回复了
@wenxueywx 原先就是设想 在 rr 级别为了 让 count 操作串行执而利用行锁,并且让 count 操作在获取行锁立马执行,确保能读到已经提交的数据。所以说本来的意思想 A 事务已经提交的数据,B 事务是通过 readview 能读到
@wenxueywx A 、B 两个事务并行,A 事务已经提交的数据,B 事务是通过 readview 是读不到的。
这句话也是错的 ,rr 级别根据 mvcc 生成 readview ,那按照你说的话,在 rr 级别只要 b 事务和 a 事务同时开启,b 事务就永远不可能读到 a 事务已提交的数据吗,但实际不是的
@wenxueywx
rr 等级的 readview 是事务开始时创建 .这句话是错的
@wengyanbin 而且只要能获取到行锁,说明上个事务已经提交了
@rqxiao 只要能获取到行锁,说明上个事务已经提交了
@wengyanbin rr 级别在 在事务开启后第一次发生快照读的时候生成 readview 而非 事务开启时生成 readview 。所以后获取到行锁的事务在 update 自己的记录后,count ( 0 )就是等于 0 。
如果按照你的说法,在 rr 级别,那第二个事务也永远不会 count=0 了?
因为根据 mvcc ,他确实会读取到事务一提交完的数据,你可以自己测试下。count 的结果和事务开始的时间无关,和第一次进行快照读有关
而且幻读的定义不是事务中,同时进行两次 查询发现 count 数量不一致,这个场景一个事务里没有 count 多次啊?

如果理解有误请指出
@wengyanbin 你指的幻读问题具体是指什么问题
@long952 我以前看网上资料的,rr 级别第一次查询生成一个 ReadView 。都是用 select 一条记录作为演示。
我一直以为是 readview 是跟记录绑定的。不同的记录会绑定不同的 readvie ,现在这个现象感觉和不是记录级别,感觉是整个表级别。
@rqxiao mysql 为 rr 级别
@wengyanbin 并发时,每个会话开启事务,获取到行锁之后,进行一次快照读。只要能获取到行锁,说明上个事务已经提交了。所以并发情况下,达到了串行执行业务。获取到行锁一定能查询当前准确的数据。为什么说会有幻读?
目前来看 select * from a_detail where id =这一句是影响了后面的 count 。就算我替换成 select * from student a 。与本业务完全不相关的表查询,也会有问题。不是很理解为什么
碍于本人现在的认知水平,理解有可能也不是对的。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2433 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 23ms · UTC 09:58 · PVG 17:58 · LAX 02:58 · JFK 05:58
Developed with CodeLauncher
♥ Do have faith in what you're doing.