# 一、什么是ACID
事物具有ACID的特性:
Atomicity(原子性):事务是一个不可分割的整体,事务内所有操作要么全做成功,要么全失败。
Consistency(一致性):事务执行前后,数据从一个状态到另一个状态必须是一致的(A向B转账,不能出现A扣了钱,B却没收到)。
Isolation(隔离性): 多个并发事务之间相互隔离,不能互相干扰。
Durability(持久性):事务完成后,对数据库的更改是永久保存的,不能回滚。
# 二、ACID怎么实现
以MySQL为例子,其实现了原子性、一致性、隔离性(可重复读)、可持久性
A原子性:由undolog日志保证,其通过记录修改前后的不同版本的数据,让事物回滚时能够撤销已经执行的SQL
C一致性:其他三个特性+代码层保证
I隔离行:由MVCC + undolog(读取各自版本) + 间隙锁(避免幻读)
D持久性:由内存+redo log来保证,mysql修改数据同时在内存和redo log记录这次操作,事务提交的时候通过redo log刷盘,宕机的时候可以从redo log恢复
分布式一致性算法 →