https://www.cnblogs.com/Vincent-yuan/p/15383491.html

https://www.nowcoder.com/feed/main/detail/f3bda69fe6f14f66a113c5267fb7dbe6?sourceSSR=users

undo log 回滚历史数据

事务回滚机制

其实,讨论MySQL的事务回滚机制,也就是在说MySQL的事务原子性是如何实现的(关于事务之前文章中有过简单介绍)。

所谓原子性,就是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做;如果事务中的一个sql语句执行失败,则已执行的语句必须回滚,数据库会退回到事务前的状态。

我们可以这么理解,就是说如果事务失败了,那么它对我们的数据库是没有任何影响的。

实现原理

在说明原理之前,需要首先介绍一下MySQL的事务日志。

MySQL的日志有很多种,如二进制日志、错误日志、查询日志、慢查询日志等,此外InnDB引擎还提供了两种事务日志:redo log(重做日志)和undo log(回滚日志)。

我们这里,之所以能够保证原子性,则是靠undo log。