Mysql的事务具有四个特性:原子性、一致性、隔离性、持久性。那么事务的四种特性分别是靠什么机制实现的呢?
-
事务的隔离性由锁机制来保证
-
事务的原子性、一致性、持久性则由redo log和Undo log来保证。
- redo log是重做日志,提供再写入操作,恢复提交事务修改的页操纵,用来保证事务的持久性。
- undo log是回滚日志,回滚记录到某个特定的版本,保证事务的原子性和一致性。 -
redo log:是存储引擎(innodb)生成的日志,记录的是物理级别上的页修改操作,比如页号XXX、偏移量yyy写入了‘zzz’数据。主要是为了保证数据的可靠性。
-
undo log:是存储引擎(innodb)生成的日志,记录的是逻辑操作日志。比如对某一行进行了insert语句操作,那么undo log就会记录与之相反的delete操作。主要用于事务的回滚(undo log记录的是每个修改操作的逆操作)和一致性非锁定读(undo log回滚记录到某个特定的版本—MVCC,多版本并发控制)。