mysql事务实现原理?

MySQL里面的事务满足ACID的特性,事务实现的原理就是InnoDB是如何保证ACID的特性

1.首先A表示Atomic原子性,需要保证多个DML操作的原子性,要么都成功,要么都失败;

执行失败就需要对原本执行成功的数据进行回滚,所以MySQL中设计了一个UNDO_LOG表,一旦出现错误,就直接从UNDO_LOG里面去读取数据,进行反向操作就可以了。

2.其次就是C表示一致性,也就是说数据的完整性约束没有被破坏,这个更多的是依赖业务层的一些保障,数据库本身也提供了一些,比如像主键的唯一约束,字段长度和类型的一些保障等等

3.接下来I表示事务的隔离性,也就是说多个并行事务对同一个数据进行操作的时候,如何去避免多个事务的干扰,导致数据混乱的问题而InnoDB中实现了SQL9.2的一个标准,提供了四种隔离级别的实现,分别是RU(未提交读)、RC(已提交读)、RR(可重复读)、串行化;

InnoDB默认采用的隔离级别是RR(可重复读),然后使用了MVCC机制,解决了脏读和不可重复读的问题,使用了行锁或者表锁的方式解决了幻读的问题。

4.最后一个是D表示持久性,只要事务执行成功,那么对这个数据的影响结果影响是永久的,不能因为数据库宕机或者其他原因,而导致数据变更失效,理论上事务提交之后,直接把数据持久化到磁盘中就可以了,因为随机磁盘IO的效率很低,InnoDB中设计了Buffer_Pool缓存区来进行优化,数据变更的时候,先更新内存缓冲区,然后在核实的时间,在持久化到磁盘里面,在这个机制里面,有可能出现在持久化的过程中发生宕机或者数据丢失,无法满足持久化,所以在引入了Redo_LOG的文件,这个文件存储了数据库变更之后的值,如果修改值不光修改了缓存区的值,另外还会把本次修改的值追加到redo_log里面去,当事务提交的时候,直接把redo_LOG中的日志刷新到磁盘里面进行持久化就可以了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值