
事务
我们知道,事务具有四大特性——ACID
A atomicity 指的是原子性
C consistency 指的是一致性
I isolation 指的是隔离性
D durability 指的是持久性
四大特性的实现原理
原子性
原子性在这指的是整个事务操作,要么同时成功要么同时失败。让它变成一个整体。
同时成功这好办,难办的是同时失败。
想要实现同时失败,就需要恢复之前的数据,如何恢复旧版本数据呢? undolog回滚日志
undolog回滚日志是实现事务原子性的关键。它保存了数据修改之前的历史数据。当我们的事务中有insert操作时,他会反向的记录一个delete,反之亦然。
隔离性
隔离性指的是当由多个活动事务的时候,每一个事务应该是相互独立的整体。也就是说它们互不干扰。
隔离性实现是基于MVCC多版本数据并发控制实现的。
持久性
持久性指的是,当我的事务提交,事务里面涉及修改的数据都会得到持久性。而不会因为某些特殊原因导致我的修改数据没有更新到磁盘里面去。
持久性的实现是由redolog重做日志完成的。
当我们对数据做增删改的时候,会经历这样的过程:
修改缓冲池里面的数据
写入缓冲池的redolog
提交事务
同步更新磁盘中的redolog
等待后台线程刷新脏数据,完成持久化。
一致性
一致性指的是发生增删改操作时,数据库从一个一致性的状态进入另一个一致性状态。
其实上面三个特性就是为了实现一致性。
举例说:
我的钱包里有1000块钱,买了一包烟花掉100块钱。
那么此时的一致性应该是这样: