前言:关于Mysql底层比较难理解的三种日志,虽然外面面试问的较少,问到的也是一些大厂,但是学习不是为了蒙混面试官的,是为了自己的,所以我相信,熟读事务支持的三种日志,会给我们设计分布式事务或者更加复杂的业务场景带来很大帮助。
(1)是什么?常见场景和用法?
undo.log 也称之为回滚日志,主要用于做事务的数据回滚。更直白的说法,就是做数据回滚恢复的,保证事务的原子性,一个操作失败,全部操作回滚。
undo.log属于逻辑日志,逻辑日志的意思就是它属于一种理论逻辑,就是按道理说当前行在“某些条件下”~‘应该’是怎样的,而不一定物理存储就一定是那样的,与之对应的是redo.log物理日志。再简单点说,逻辑就像产品经理的天荒夜谈,物理就是我们程序员要变成的落地实现。所以回滚日志的性质,就决定了它必然是逻辑日志。
常见的场景就是我们加了事务控制的时候,针对多个不同的事务ID,看到的数据值都是不一样的(不同隔离级别稍有差异),原因就是事务ID不一样,对应的视图副本read view也不一样,视图副本不保存数据,但是会保存新老事务版本ID,通过老的版本ID,就能在undo.log中找到对应的旧数据,这是在MVCC可见性中的应用。
同时三大隐藏列中的回滚指针,也会指向undo.log中的旧数据,方便回滚,这就是最常见的数据回滚中的应用。