腾讯面试: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如何实现的隔离级别?】回复【资料】有我准备的一线大厂面试资料和简历模板 ,
推荐阅读
- 腾讯游戏发起对华为的挑战,或因后者对国内手机市场的影响力大跌
- 飞书文档微信小程序审核被卡?字节跳动副总裁谢欣:希望腾讯停止无理由封杀
- “科技+文化创意”加速文旅融合,腾讯文旅助力河南打造行业新名片
- 腾讯申请「打工鹅」商标,网友:“虾仁猪心”
- 腾讯苏州战略合作再升级,腾讯(苏州)数字产业基地揭牌
- 战火再起!字节跳动副总裁炮轰腾讯“无理封杀”
- 腾讯|以松江为起点和支点,腾讯“牵手”长三角G60科创走廊,开启合作新“朋友圈”
- 省人社厅与腾讯签署协议共同培养高素质“广东技工”
- 字节跳动高管喊话腾讯,称“飞书文档”小程序审核被卡近两月
- 疫情让线下教培机构停摆?别怕,腾讯教育“抗疫空投包”抵达
