前言
在前一接的MVCC中,我们已经见过undo日志,这一节来详细看看undo日志与redo日志。
前文讲过事务的ACID:原子性、一致性、隔离性、持久性,其中隔离性已经将的很清楚了,那原子性与持久性靠什么来实现?答案就是redo log 和undo log。
原文
概念
原理
事务操作:对user_info表执行 update user_info set name =“赵六” where id=1 整个流程如下
1、修改数据前首先把需要修改的数据从数据表中读取到内存。
2、把需原数据作为历史版本记录到undo log里。
3、把需要变更的数据记录到redo log里。
4、commit或rollback事务,修改表数据。

-
原子性保障
对数据进行一系列的修改之前都会把其历史数据保存到undo log,然后把更新的数据记录到redo log日志里。 当我们的事务进行commit后可以通过redo log日志来保证只要commit后的事务数据都会全部同步修改到数据库。当事务就行rollback时,我们可以通过undo log记录的历史版本来对整个事务关联的修改的数据进行回滚。
-
持久性保障
持久性是在系统无论发生异常、崩溃的时候依然能保证我们的数据能正常的持久化到数据库中,在系统出现异常或崩溃的时候,我们可以通过对redo log进行回放,对于已经redo log 里已经commit的事务执行数据重做,对于redo log里没有commit的事务,我们则可以通过undo log来对事务涉及到的数据进行数据回滚从而最终保证事务数据的持久性。