MVCC机制略解

在mysql中,默认的隔离级别是可重复读。即在一个事物中读取到的数据总是一样的,即使其他事务把数据改了,那在这个事务中读取的数据还是第一次读取的数据。
mysql还可以设置为读已提交隔离级别。即一个事务中读取的数据,随着其他事务对数据的修改而改变。
能够保证隔离级别读取不同的数据的底层原理,就是MVCC机制。
MVCC机制,又叫多版本控制机制,下面大致看下该机制的工作原理。
undo日志版本链:
undo日志版本链是指一行数据被多个事务依次修改过后,在每个事务修改完后,Mysql会保留修改前的数据undo回滚 日志,并且用两个隐藏字段trx_id和roll_pointer把这些undo日志串联起来形成一个历史记录版本链。
对每条数据的修改,都会将该条数据记录在undo日志形成一条版本链,记录每个状态的修改值,如下图:
在这里插入图片描述
红色部分代表这条数据的修改历史,最后面的蓝色代表当前值。
一致性视图read-view
一致性视图是在一个事务中,当第一次执行查询语句时,会把返回的结果形成一个视图,放在内存中。这个视图就是针对这个事务的,其他的事务查询sql后,会生成其他对应的视图。在可重复读的隔离级别下,这个视图生成后,直到事务结束,都不会发生变化。这个视图里存的是第一次查询这条数据时已经提交事务的id和未提交事务的id。当在一个事务中再次查询这条语句的时候,read-view视图会根据存放的已提交事务id和未提交事务id在undo日志链中进行比较,来判断这个事务该读取undo日志链中的哪个数据,以此来保证可重复读。
由上面的描述可知,可MVCC机制是通过undo日志链和一致性视图来完成的。其本质就是一致性视图里存了事务当时查询的事务id,当这个事务再次查询时,从undo日志链中找当时视图中存的这个id,然后返回。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的小小酥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值