多版本并发控制MVCC的详细介绍

多版本并发控制MVCC


MVCC是用来干什么的?

在Mysql的Innodb存储引擎中,多版本并发控制MVCC是为了解决在可重复读(Repeatable Read)隔离级别下的幻读问题而出现的。


MVCC的具体实现

 MVCC有乐观和悲观两种实现方式,下面我以Innodb中的版本为例讲述他的具体实现

 首先,MVCC会在每张表后添加隐藏的两列,分别用来记录 修改时的系统版本号 以及 删除时的系统版本号 (系统版本号与事务有关,每开启一个新事务,系统版本号都会递增,当前事务的版本号取当前的系统版本号),在增删改查时,通过对这两列隐藏版本号的修改来解决幻读等问题,下面我们来具体看一下:

  • SELECT
    • 在select操作中会分别根据这两行采取不同的过滤条件:
      • 对于修改版本号列,修改版本号小于等于当前事务的版本号,即当前事务开启前的修改才会去读取或者时当前事务的修改
      • 对于删除版本号列,删除版本号大于当前事务的版本号或者删除版本号未定义,即在我开启事务之后删除的数据我依然可以读取
  • INSERT
    • 插入的每一行都会把修改版本号字段设置为当前版本号。
  • DELETE
    • 删除的每一行并不是真正的删除,只是将删除版本号设置为删除时的系统版本号。
  • UPDATE
    • 更新操作为新插入一行,并把原来的行的删除版本号设置为当前系统版本号,而新插入的修改版本号设置为当前系统版本号。

emsp;通过这样的设置,使得Innodb不需要串行化就可以在可重复读的隔离条件下解决幻读问题,提高了增删改查的效率

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值