面试官:undoLog是什么?

142 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第 11 天,点击查看活动详情

哈喽,大家好,我是二毛。

相信大部分小伙伴刚学完 Mysql 的增删改查语法之后,再进行深入学习的话,就会碰到各种日志,比如 undoLog/binLog/redoLog 等,那么这些日志分别是什么,又可以用来做什么呢?

今天这篇文章带你先解决下什么是 undoLog 这个疑问。

undoLog

是什么

顾名思义,就是“不做日志”,那么不做什么呢?在 Mysql 就是不做 sql 执行,结合一下就是:不执行SQL前的数据情况

引用下官方的解释:

MySQL(存储引擎需要能支持事务)在修改记录之前(提交事务之前),会把原先记录的值先保存起来(也就是写入到undo log),然后再修改(提交事务),当出问题的时候MySQL可以利用undo log来回滚事务,即恢复原先的记录值。

undo log由InnoDB的存储引擎层产生,是InnoDB 存储引擎特有的(和redo log一样)。

undo log属于逻辑日志。

做什么

1 事务回滚

前面也提到了,undoLog 是可以用来进行事务的回滚的,从而保证事务的原子性。

比如:执行一条 insert 语句:

insert into user values(1, '程序员二毛', '掘金优秀创作者&百大UP主')

那么 undoLog 就会记录与他想法的语句,也就是 delete:

delete from user where id = 1

2 MVCC

MVCC全称即 Multi-Version Concurrency Control,即:多版本并发控制。

在MySQL的InnoDB存储引擎中,用版本号把 undoLog 串联起来,从而形成版本链,从而实现MVCC。

举个例子,当我们读取的某一行被其它事务锁定的时候,InnoDB可以从undo log中分析出该记录历史版本的数据,从而让我们可以读取到当前事务操作之前的数据(也就是快照读)。

最后

本文主要跟大家介绍了 undoLog 的概念,以及作用:1事务回滚;2 MVCC。

希望对大家有帮助。

我是二毛,我们下期再见~