Mysql 事务的特性 —— ACID

47 阅读1分钟

ACID

特性作用
Atomicity原子性一个事务里N个操作当成一个整体去执行,一个事务里N个操作要么全部执行,要么都不执行。
Consistency一致性数据一致性 / 约束一致性
Isolation隔离性一个事务的执行不能被其他事务干扰
Durability持久性保存到磁盘
graph LR
acid(事务特性)
acid --> a(一致性)
acid --> c(原子性)
acid --> i(持久性)
acid --> d(隔离性)
a --> ad(数据一致性 : 保证数据完整)
c --> c1(一个事务内所有操作全部执行/全部不执行)
i --> i1(WAL日志先行:undo log/redo log) --> i2(持久化到磁盘)
d --> d1(隔离级别) --> mvcc(MVCC:多版本并发控制)
d1 --> lbcc(LBCC:基于锁的并发控制)
lbcc --> record(record lock - 记录锁)
lbcc --> gap(gap lock - 间隙锁)
lbcc --> nextKey(next key lock - 临键锁 = record + gap)

一、Atomicity 原子性

undo log则是事务原子性和隔离性实现的基础。

二、Isolation 隔离性

无隔离性所引发的问题
脏读一个事务读取到了另一个事务修改但未提交的数据
不可重复读Read committed一个事务中多次读取同一行记录的结果不一致。
幻读一个事务中多次按相同条件查询,结果不一致。后续查询的结果和面前查询结果不同,多了或少了几行记录。
隔离级别解决问题
Read uncommitted读未提交
Read committed读已提交脏读
Repeatable read可重复读不可重复读
Serializable串行读幻读

MVCC

读已提交可重复读 两个隔离级别由MVCC实现。 而MVCC的实现其中就依赖了undo log。

三、Durability 持久性

redo log

Mysql持久化并不会先刷到磁盘,而是先写redo log再持久化到磁盘。
当Mysql故障时,可以读取redo log对数据进行恢复(并非可以全部恢复)。

四、Consistency 一致性

数据一致性:

是由原子性、持久性、隔离性共同保证的结果