mysql事物的特性即实现原理

事务有四特性:原子性,一致性,隔离性,持久性,及ACID

那么这四特性的底层原理是什么呢,看一下。

 

首先,如何实现事务的原子性

所谓原子性,就是事务要么全部执行完成 ,要么全部回滚,执行失败,从一个一致性的状态转换到另一个一致性的状态。

一致性就是事务开始之前和结束之后,数据库完整性约束没有被破坏。

隔离性就是两个事务在各自提交之前不可见。

持久性就是事务一旦提交,就会永久落盘,不会再回滚。

 

事务的原子性是由undo log来保证的,事务开始前,会先将旧数据保存一份到undo log中,如果在这中间环节出现故障,那么,会通过之前版本的undo log 恢复到之前版本数据库,保证了事务的原子性。

 

事务的持久性是由redo log undo log一起实现,undo log保存旧数据,redo log保存新数据,在事务提交时只需将redo log 落盘,持久化到磁盘上就可以。

 

注:日志并不是直接写入文件的,而是先写入redo log buffer 当需要将日志刷新到磁盘上时,将许多事务一起写入磁盘。在数据恢复时,先执行重做日志,在通过undo回滚未提交的事务,先redo,后undo

 

事务的原子性和一致性有区别,但是又不能分开看,这两个特性是互补的,一致性要求事务执行前后数据库保证一致性,但是中间的操作必然会有暂时的不一致,原子性就发挥了作用。

原子性消除了事务在执行期间不可避免的不一致状态对事务执行前后的数据库状态的影响。

 

事务的隔离性是靠加锁来实现,有四种隔离级别,每种的加锁方式不同,实现的隔离性能也不同。(看事务隔离级别及底层原理那篇笔记)。

 

Redo log的物理文件是ib_logfile。。。

Undo log5.6之前在共享表空间的回滚段中,即ibdata,在5.7之后可以设置独立表空间,回滚段在独立表空间中,也可以继续用共享表空间。

转载于:https://www.cnblogs.com/xiaoerlaigeshao/p/10620144.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值