事务四大特性——一致性(Consistency)——MVCC


一、MVCC简绍

英文全称Multi-Version Concurrency Control,中文全称是多版本并发控制
**作用:**读取数据时通过一种类似快照的方式将数据保存下来,这样读锁和写锁就不冲突,不同的事物session会看到自己版本的数据,版本链,而MVCC只在READ COMMITTED和REPEATABLE READ 两个隔离级别下工作,其他两个隔离级别和MVCC不兼容,因为READ UNCOMMITTED总是读取最新的数据库,而不是符合当前事物的数据行。而serializable则是会对所有读取的行都加锁。

二、聚簇索引中两个必要隐藏列

trx_id : 用来储存每次对某条聚簇索引记录进行修改的时候的事物id。
roll_pointer : 每次对那条聚簇索引记录有修改的时候,都会把老版本写入undo日志中,这个roll_pointer就是储存了一个指针,它指向这条聚簇索引记录上一个版本的位置,通过它来获得上一个版本的记录信息

三、readview

已提交读和可重复读的区别就在于它们生成的readview的策略不同
事物开始时创建readview,readview维护当前活动的事物id,即未提交事物id,排序生成一个数组访问数据,获取数据中的事物id(获取的是事物id最大的记录),对比readview:
如果在readview的左边(比readview都小),可以访问(在左边意味着该事物已经提交)
如果在readview的右边(比readview都大)或者就在readview中,不可访问,获取roll_pointer,取上一版本重新对比(在右边意味着,该事物在readview生成之后出现,在readview中意味着该事物还未提交)

已提交读隔离事物级别下的事物在每次查询的开始都会生成一个独立的readview,而可重复读隔离级别在第一次读的时候生成一个readview,之后读的都复用之前的readview。这就是mysql的MVCC通过版本链,实现多个版本,可并发读写,通过readview生成策略的不同实现不同的隔离级别

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值