ACID
特性 | 作用 | |
---|---|---|
Atomicity | 原子性 | 一个事务里N个操作当成一个整体去执行,一个事务里N个操作要么全部执行,要么都不执行。 |
Consistency | 一致性 | 数据一致性 / 约束一致性 |
Isolation | 隔离性 | 一个事务的执行不能被其他事务干扰 |
Durability | 持久性 | 保存到磁盘 |
一、Atomicity 原子性
undo log则是事务原子性和隔离性实现的基础。
二、Isolation 隔离性
无隔离性所引发的问题 | |
---|---|
脏读 | 一个事务读取到了另一个事务修改但未提交的数据 |
不可重复读 | 一个事务中多次读取同一行记录的结果不一致。 |
幻读 | 一个事务中多次按相同条件查询,结果不一致。后续查询的结果和面前查询结果不同,多了或少了几行记录。 |
隔离级别 | 解决问题 | |
---|---|---|
Read uncommitted | 读未提交 | |
Read committed | 读已提交 | 脏读 |
Repeatable read | 可重复读 | 不可重复读 |
Serializable | 串行读 | 幻读 |
MVCC
读已提交 和 可重复读 两个隔离级别由MVCC实现。
而MVCC的实现其中就依赖了undo log。
三、Durability 持久性
Mysql持久化并不会先刷到磁盘,而是先写redo log再持久化到磁盘。
当Mysql故障时,可以读取redo log对数据进行恢复(并非可以全部恢复)。
四、Consistency 一致性
数据一致性:
是由原子性、持久性、隔离性共同保证的结果