回滚日志undoLog

MVCC其实是通过undo log来实现的, 可以认为是通过在每行记录后面保存两个隐藏的列来实现的。
这两个列,第一个是记录历史版本信息的指针,第二个是数据行的删除标记。

在MySQL中,当我们对某条记录执行更新操作时,MySQL会将原有记录标记为删除,并在数据行中新增一条记录。这条新增的记录就是新版本的记录,同时原有记录的指针会指向这个新的记录。这种做法称为行级别的事务。


每开始一个新的事务,系统版本号就会自动递增,事务开始时刻的系统版本号会作为事务的ID。

undo用来回滚行记录到某个版本。undo log一般是逻辑日志,根据每行记录进行记录。

 

进行数据更新操作的时候,不仅会记录redo log,还会记录undo log,
如果因为某些原因导致事务回滚,那么这个时候MySQL就要执行回滚(rollback)操作,利用undo log将数据恢复到事务开始之前的状态。

 

如我们执行下面一条删除语句:
delete from user where id = 1;
那么此时undo log会记录一条对应的insert 语句【反向操作的语句】,以保证在事务回滚时,将数据还原回去。

 

 

你可能感兴趣的:(数据库)