redo日志

基本知识:InnoDB存储引擎是以页面为单位来管理存储空间的,数据库会先把页面缓存到内存当中(Buffer Pool),再对数据进行增删改查。

问题:

  1. 1.

    事务有持久化的需求,如果只在内存中操作,当发生故障后,数据就消失了。

  2. 2.

    如果只是修改了一条数据,就将数据刷入磁盘,有点太浪费性能了

  3. 3.

    磁盘的随机读写比较慢

此时,数据库的redo日志的作用就显现出来了

redo日志主要存储了某次操作的具体操作内容,相当于先将数据记录下来了,而且日志是顺序写入磁盘的,顺序写入的速度要比随机读写款的多。

当一个事务执行完,还未写入磁盘时发生了故障,那么重启后,可以根据redo日志来进行写入

undo日志

undo日志是用来保证事务的原子性的,undo日志保存了数据修改之前的状态。

  • 插入一条记录时,要把这条记录的主键值记下来,之后回滚的时候只需要把这个主键值对应的记录删掉就好了。

  • 删除了一条记录,要把这条记录中的内容都记下来,这样之后回滚时再把由这些内容组成的记录插入到表中就好了。

  • 修改了一条记录,要把修改这条记录前的旧值都记录下来,这样之后回滚时再把这条记录更新为旧值就好了。