menu

Junjielee Blog

在平凡中坚持前行,总会遇见不凡的自己

理解MySQL事务

MySQL 的 InnoDB存储引擎支持事务,只要是一条SQL语句,MySQL都把它当作事务处理。其中MySQL有四种事务隔离级别:READ UNCOMMITED, READ COMMITED, REPEATABLE READSERIALIZABLE,为什么要有事务隔离级别呢,处于性能和数据一致性完整性等的平衡。

Undo log 和 Redo log

Undo log 用于回滚,譬如一个事务中有A,B两个操作,A操作执行后,B操作没执行系统就奔溃了,那么重启服务的时候,需要回滚A操作。 (针对数据库原子性

Redo log 用于恢复,因为在事务完成,提交后,数据会先写入缓冲区(缓冲区作用在于磁盘写的速度不及内存速度),在这个时候,系统奔溃了,等重启服务后,需要恢复这些数据,到磁盘。(针对数据库持久性

MVCC

为了提高性能,InnoDB引入并发控制机制,有了这个机制,用户在读取数据的时候,就不用加锁了。

当写入数据时候,系统会生成另外一个版本的数据(快照),根据 时间戳 确定哪个是最新数据。

参考: