腾讯面试:MySQL事务与MVCC如何实现的隔离级别?( 五 )
总结: 使用READ COMMITTED隔离级别的事务在每次查询开始时都会生成一个独立的 ReadView 。
REPEATABLE READ 隔离级别下的ReadView在事务开始后第一次读取数据时生成一个ReadView(m_ids列表)
时间 Transaction 777 Transaction 888 Trasaction 999 T1 begin; T2 begin; begin; T3 UPDATE user SET name = 'CR7' WHERE id = 1; T4 ... T5 UPDATE user SET name = 'Messi' WHERE id = 1; SELECT * FROM user where id = 1; T6 commit; T7 UPDATE user SET name = 'Neymar' WHERE id = 1; T8 SELECT * FROM user where id = 1; T9 UPDATE user SET name = 'Dybala' WHERE id = 1; T10 commit; T11 SELECT * FROM user where id = 1;
时间点 T5 情况下的 SELECT 语句:
当前版本链:
文章插图
再当前执行select语句时生成一个ReadView , 此时 m_ids 内容是:[777,888] , 所以但前根据ReadView可见版本查询到的数据为 Mbappe 。
时间点 T8 情况下的 SELECT 语句:
当前的版本链:
文章插图
此时在当前的 Transaction 999 的事务里 。 由于T5的时间点已经生成了ReadView , 所以再当前的事务中只会生成一次ReadView , 所以此时依然沿用T5时的m_ids:[777,999] , 所以此时查询数据依然是 Mbappe 。
时间点 T11 情况下的 SELECT 语句:
当前的版本链:
文章插图
此时情况跟T8完全一样 。 由于T5的时间点已经生成了ReadView , 所以再当前的事务中只会生成一次ReadView , 所以此时依然沿用T5时的m_ids:[777,999] , 所以此时查询数据依然是 Mbappe 。
MVCC总结:所谓的MVCC(Multi-Version Concurrency Control, 多版本并发控制)指的就是在使用 READ COMMITTD 、REPEATABLE READ 这两种隔离级别的事务在执行普通的 SEELCT 操作时访问记录的版本链的过程 , 这样子可以使不同事务的 读-写 、 写-读 操作并发执行 , 从而提升系统性能 。
在 MySQL 中 ,READ COMMITTED 和 REPEATABLE READ 隔离级别的的一个非常大的区别就是它们生成 ReadView 的时机不同 。 在 READ COMMITTED 中每次查询都会生成一个实时的 ReadView , 做到保证每次提交后的数据是处于当前的可见状态 。 而 REPEATABLE READ 中 , 在当前事务第一次查询时生成当前的 ReadView , 并且当前的 ReadView 会一直沿用到当前事务提交 , 以此来保证可重复读(REPEATABLE READ) 。
好啦以上就是本期的全部内容了 , 如果你觉得写得不错 , 请给我一个免费的在看 , 你知道的越多 , 你不知道的越多 , 我是敖丙 , 我们下期见 , 拜拜!
絮叨敖丙把自己的面试文章整理成了一本电子书 , 共 1630页!
干货满满 , 字字精髓 。 目录如下 , 还有我复习时总结的面试题以及简历模板 , 现在免费送给大家 。
文章插图
【腾讯面试:MySQL事务与MVCC如何实现的隔离级别?】回复【资料】有我准备的一线大厂面试资料和简历模板 ,
- 华为、腾讯、万科员工职业发展体系建设与实践
- 阿里腾讯都在做的可视化大屏,我用这工具里的100个模板实现了
- 腾讯游戏开发工程师:Linux 机器 CPU 毛刺问题排查
- 一个普通本科的安卓程序员如何才能进腾讯,阿里,字节这些大厂?
- 阿里铁军原主帅俞朝翎:阿里面试中的“望闻问切”法
- 腾讯|蚂蚁员工人人喜提283平米大房子?你想多了
- 腾讯发出警告!这个流氓APP千万别装:秒变“紧箍咒”
- 内容|2020腾讯ConTech大会:基于信赖,30位嘉宾带用户打开眼界
- 腾讯关联企业入股VR游戏开发商,持股39%
- 中国音乐行业洗牌,昔日巨头曲终人散,网易云成腾讯唯一对手
