Innodb引擎中的事务实现解析

162 阅读1分钟

事务的特性

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

事务的实现

事务的隔离性是通过锁来实现的,事务原子性,持久性,一致性是由redo log和undo log来实现的,redo log称为重做日志,用来保证事务的原子性和持久性。undo log用来保证事务的一致性。

redo log

redo log恢提交事务修改的页操作,而undo log回滚记录到某个特定版本,redo log是物理日志,记录的是页的物理操作,undo log是逻辑日志,根据每行记录进行记录

当事务提交时必须将该事务的所有日志写入到重做日志进行持久化,从而保证事务的持久性。

undo log

undo log日志,其实就是在insert执行时写入一个相反的操作delete,但是并不是还原到之前的状态,比如执行delete回滚时undo记录的是insert,但是delete对空间的占用其实还是发生变化了。而且在undo log执行时数据库还是会记录redo log对undo log进行保护

二进制日志

二进制日志是逻辑日志,他记录的是sql语句,他是mysql数据库日志,而redo和undo都是innodb层级的日志,它主要是在主从复制时使用,也叫做binlog,在事务提交时进行记录