了解数据库的ACID特性

时间:2022-02-25 01:15:11

了解数据库的ACID特性

ACID特性

原子性(Atomicity)
单个事务,为一个不可分割的最小工作单元,整个事务中的所有操作要么全部commit成功,要么全部失败rollback,对于一个事务来说,不可能只执行其中的一部分SQL操作,这就是事务的原子性。

一致性(Consistency)
  数据库总是从一个一致性的状态转换到另外一个一致性的状态。

隔离性(Isolation)
  通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。

持久性(Durability)
  一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。

ACID具体实现

对MySQL来说,逻辑备份日志(binlog)、重做日志(redolog)、回滚日志(undolog)、锁技术 + MVCC就是MySQL实现事务的基础。
原子性:通过undolog来实现。
持久性:通过binlog、redolog来实现。
隔离性:通过(读写锁+MVCC)来实现。
一致性:MySQL通过原子性,持久性,隔离性最终实现数据一致性。

隔离性

隔离级别

隔离性是事务ACID特性里最复杂的一个。在SQL标准里定义了四种隔离级别,每一种级别都规定一个事务中的修改,哪些是事务之间可见的,哪些是不可见的。
级别越低的隔离级别可以执行越高的并发,但同时实现复杂度以及开销也越大。

隔离级别 效果
读未提交(RU) 一个事务还没提交时,它做的变更就能被别的事务看到。(别的事务指同一时间进行的增删改查操作)
读提交(RC) 一个事务提交(commit)之后,它做的变更才会被其他事务看到。
可重复读(RR) 一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
串行(xíng)化(S) 正如物理书上写的,串行是单线路,顾名思义在MySQL中同一时刻只允许单个事务执行,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

MVVC

MVCC(Mutil Version Concurrency Control)多版本并发控制,是一种并发控制的方法(而非具体实现),一般在数据库管理系统中,实现对数据库的并发访问。

MVVC外链
1.版本链
了解数据库的ACID特性

2.ReadView
在RC隔离级别下,每一次快照读都会生成一个最新的ReadView;
在RR隔离级别下,只有事务中第一次快照读会生成ReadView,之后的快照读都使用第一次生成的ReadView。
事务隔离级别为RC(读已提交隔):
了解数据库的ACID特性
2、事务隔离级别为RR(可重复读):
了解数据库的ACID特性
通过readView可以更容易区分开

隔离级别 效果
读提交(RC) 一个事务提交(commit)之后,它做的变更才会被其他事务看到。
可重复读(RR) 一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。