【MySQL】InnoDB引擎 —— 事务原理 —— undo log

undo log是用来解决事务的原子性的,事务的原子性的实现就要依赖于undo log日志。

undo log也称为回滚日志,用于记录数据被修改前的信息。简单来说就是:当我们执行一条update语句的时候,那么在undo log里面将会记录这条语句在更新之前长什么样。

作用包含两个 : 提供回滚(保证事务的原子性) 和 MVCC(多版本并发控制) 。

undo log和redo log记录物理日志不一样,它是逻辑日志,物理日志主要记录的是:这个数据里面的内容是什么样子的,而undo log记录的是每一步执行的是什么样的操作。可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的 update记录。

相反:当你执行一条update,undo log里面记录的就是执行update之前的这条数据长什么样子。

当执行rollback时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚,这样就保证了事务的原子性。

undo log主要的作用,第一个就是用于数据回滚的,一旦我们事务提交或者事务回滚了,那这份undo log实际上也就不需要了。但是!

Undo log销毁:undo log在事务执行时产生,事务提交时,并不会立即删除undo log,因为这些日志可能还用于MVCC。

Undo log存储:undo log采用段的方式进行管理和记录,存放在前面介绍的 rollback segment 回滚段中,内部包含1024个undo log segment。

之前讲解段的时候,提到了有一个段叫回滚段,undo log就存放在回滚段中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值