数据库原理之四redo日志与undo日志

前言

在前一接的MVCC中,我们已经见过undo日志,这一节来详细看看undo日志与redo日志。

前文讲过事务的ACID:原子性、一致性、隔离性、持久性,其中隔离性已经将的很清楚了,那原子性与持久性靠什么来实现?答案就是redo log 和undo log。

原文

概念

  • Undo log

    Undo log 主要用于记录数据被修改之前的日志,在表信息修改之前先会把数据拷贝到undo log 里,当事务进行回滚时可以通过undo log 里的日志进行数据还原。

  • redo log

    redo log主要用于在进行日志回放的时候把已经COMMIT的事务重做一遍,对于没有commit交由undo log进行数据回滚操作。

原理

事务操作:对user_info表执行 update user_info set name =“赵六” where id=1 整个流程如下

1、修改数据前首先把需要修改的数据从数据表中读取到内存。

2、把需原数据作为历史版本记录到undo log里。

3、把需要变更的数据记录到redo log里。

4、commit或rollback事务,修改表数据。

undo-redo

  • 原子性保障

    对数据进行一系列的修改之前都会把其历史数据保存到undo log,然后把更新的数据记录到redo log日志里。 当我们的事务进行commit后可以通过redo log日志来保证只要commit后的事务数据都会全部同步修改到数据库。当事务就行rollback时,我们可以通过undo log记录的历史版本来对整个事务关联的修改的数据进行回滚。

  • 持久性保障

    持久性是在系统无论发生异常、崩溃的时候依然能保证我们的数据能正常的持久化到数据库中,在系统出现异常或崩溃的时候,我们可以通过对redo log进行回放,对于已经redo log 里已经commit的事务执行数据重做,对于redo log里没有commit的事务,我们则可以通过undo log来对事务涉及到的数据进行数据回滚从而最终保证事务数据的持久性。

# MySQL 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×