MySql中的undo.log

undo.log是MySQL的回滚日志,用于保证事务的原子性,记录了事务对数据的修改前的状态。内容包括回滚段、两种基本格式(insert仅记录操作值,update/delete记录旧值及回滚指针)、回滚时机和Mysql5.7+的参数设定。Purge线程负责清理不再需要的undo.log记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:关于Mysql底层比较难理解的三种日志,虽然外面面试问的较少,问到的也是一些大厂,但是学习不是为了蒙混面试官的,是为了自己的,所以我相信,熟读事务支持的三种日志,会给我们设计分布式事务或者更加复杂的业务场景带来很大帮助。

(1)是什么?常见场景和用法?

undo.log 也称之为回滚日志,主要用于做事务的数据回滚。更直白的说法,就是做数据回滚恢复的,保证事务的原子性,一个操作失败,全部操作回滚。
undo.log属于逻辑日志,逻辑日志的意思就是它属于一种理论逻辑,就是按道理说当前行在“某些条件下”~‘应该’是怎样的,而不一定物理存储就一定是那样的,与之对应的是redo.log物理日志。再简单点说,逻辑就像产品经理的天荒夜谈,物理就是我们程序员要变成的落地实现。所以回滚日志的性质,就决定了它必然是逻辑日志。
常见的场景就是我们加了事务控制的时候,针对多个不同的事务ID,看到的数据值都是不一样的(不同隔离级别稍有差异),原因就是事务ID不一样,对应的视图副本read view也不一样,视图副本不保存数据,但是会保存新老事务版本ID,通过老的版本ID,就能在undo.log中找到对应的旧数据,这是在MVCC可见性中的应用。
同时三大隐藏列中的回滚指针,也会指向undo.log中的旧数据,方便回滚,这就是最常见的数据回滚中的应用。

(2)undo.log的两种基本格式?
undo.log的基本结构是回滚段,每个回滚段内包含着1024事务的记录.

这两种格式是针对操作方式来说的:
insert插入操作,undo.log中只会记录当前操作值,不存在回滚指针(也就是新增的row无对应的回滚指针),不存在旧值(废话)。
在这里插入图片描述

update,delete 操作,有回滚指针,有旧值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值