Mysql事务实现的原理

Mysql里面的事务满足ACID特性,Mysql事务的原理就是InnDB是如何保证ACID的特性,其中

  1. A代表原子性(Atomicity):指数据库事务是一个原子操作单元,要么全部执行成功(提交),要么全部不执行(回滚)。如果在事务执行过程中发生错误或失败,系统会将所有已执行的操作进行回滚,所有InnDB里面设计了一个UNDO_LOG表在事务的执行过程中,把修改前的数据快照保存至UNDO_LOG里面,一旦出现错误就在UNDO_LOG去读取数据去进行反向操作就行了, 以保证数据的一致性。

  2. C代表一致性(Consistency):指数据库事务在开始和结束时,必须保持系统的一致性。这意味着事务的执行不能破坏数据库预定义的规则和约束条件,使数据从一个有效状态转换为另一个有效状态,数据库也提供了一些类似于主键的唯一约束,字段的长度和类型的保障。

  3. I代表隔离性(Isolation):指数据库事务的执行是相互隔离的,即每个事务的操作对其他事务是不可见的。隔离性确保了并发事务的执行不会产生相互干扰的结果。各个事务之间应该是相互独立且互不影响的,InnDB实现了一个SQL92的一个标准,提供了四种隔离级别的实现,分别为RU(未提交读),RC(已提交读),RR(可重复读),Serializeble(串行化),InnDB默认采取的隔离级别为RR,然后使用MVCC机制解决了脏读和不可重复读的问题,然后使用行锁和表锁的方式来解决了幻读的问题。
  4. D代表持久性(Durability):指一旦事务被提交,它对数据库中的数据更改就是永久性的,并且对于后续的事务和系统故障是可见的。持久性通过将事务的结果写入稳定的存储介质(如硬盘)来实现,以便在系统故障发生后能够恢复数据,因为IO随机读取的效率低下 , InnDB设计了 Buffer Pool缓冲区来优化,数据发生变更的时候,先更新内存缓冲区,然后在合适的时间,再持久化到磁盘内,在这个机制里面有可能出现在持久化的这样一个过程中,如果数据库宕机导致数据丢失的一个情况,无法满足持久化的一个情况,所有在InnDB中引用了一个Redo_LOG这样的文件,这个文件存储了数据库变更后的一个值,当我们通过事务进行数据更变的时候,除了修改内存缓冲区的数据以外,还会把本次修改的值追加到REDO_LOG里面,当事务提交的时候,直接把READ_LOG里面日志刷新到磁盘里面,进行持久化,一旦数据库出现宕机,在Mysql重启以后,直接用REDO——LOG里面保存的重写日志,读取出来以后再去执行一遍,从而去保证数据的一个持久性

这些 ACID 特性确保了数据库事务的可靠性和一致性,使得数据库能够保持数据的完整性,并提供了有效的并发控制机制,以避免数据不一致和冲突。ACID 特性是关系型数据库管理系统(RDBMS)的核心特性,但在某些非关系型数据库中,为了满足高性能和可伸缩性等需求,可能会有所放宽

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值