MVCC原理、以及靠什么保证ACID

mvcc的实现原理主要由三个隐藏字段、undolog和read view实现。

隐藏字段:

        DB_TRX_ID:事务ID,创建时的事务或者最后修改记录的事务ID

        DB_ROLL_PTR:回滚指针,指向上个版本,配合undolog用于回滚

        DB_ROW_ID:行号,如果没有主键,innodb自动生成的隐藏主键

undo log日志:

        回滚日志,记录历史版本数据

read view:

        指某个事务在进行第一次数据读取时,会读取当前最新的数据,也就是说读取操作之前其他事务最后一次修改后的数据

        RC和RR的不同在于生成read view的策略不同。

        RC只会在事务第一次读取的时候生成read view,之后一直使用这个read view,所以保证了这个事务中读取的数据一直一致。

        RR读取的时候则是每次都重新生成read view,所以会产生不可重复读的情况,因为每次读都是最新的数据。

ACID如何保证:

        A(原子性):依靠undo log回滚日志保证原子性,要么全部失败要么全部成功

        C(一致性):靠其他三个以及业务上的处理共同保证

        I(隔离性):依靠MVCC保证了隔离性

        D(持久性):依靠redo log日志保证了持久性,有数据修改、增加和删除会先记录到redo log日志用,如果最后入库失败也能通过redo log日志恢复

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值