ACID

作者: 忘净空 | 来源:发表于2017-09-29 15:16 被阅读9次

ACID

ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),它们四者谁是真正的老大:原子性是基础,隔离性是手段,持久性是目的,真正的老大就是一致性

隔离性

隔离性是手段,那么它具体有哪些手段,这些手段具体要解决什么问题呢?其实是为了解决数据在高并发下所产生的问题:

问题:

  1. Dirty Read(脏读)

  2. Unrepeatable Read(不可重复读)

  3. Phantom Read(幻读)

脏读
时间 事务A(存库) 事务B
T1 开始事务
T2 开始事务
T3 查询余额(1000元)
T4 取出1000元(余额0元)
T5 查询余额(0元)
T6 撤销事务(余额1000元)
T7 存入500元(余额500)
T8 提交事务

余额应该为 1500 元才对!请看 T5 时间点,事务 A 此时查询余额为 0 元,这个数据就是脏数据,它是事务 B 造成的。

不可重复读
时间 事务A(存库) 事务B
T1 开始事务
T2 开始事务
T3 查询余额(1000元)
T4 查询余额(1000元)
T5 取出1000元(余额0元)
T6 提交事务
T7 查询余额(0元)

事务 A 其实除了查询了两次以外,其他什么事情都没有做,结果钱就从 1000 变成 0 了,这就是重复读了

幻读
时间 事务A(存库) 事务B
T1 开始事务
T2 开始事务
T3
T4 统计总存款(10000元)
T5 存入100元
T6 提交事务
T7 统计总存款(10100元)

银行工作人员,每次统计总存款,都看到不一样的结果。不过这也确实也挺正常的,总存款增多了,肯定是这个时候有人在存钱。但是银行的系统对于这个是不允许的。


归纳一下,以上提到了事务并发所引起的跟读取数据有关的问题,各用一句话来描述一下:

脏读:事务 A 读取了事务 B 未提交的数据,并在这个基础上又做了其他操作。

不可重复读:事务 A 读取了事务 B 已提交的更改数据。

幻读:事务 A 读取了事务 B 已提交的新增数据。

第一条是坚决抵制的,后两条在大多数情况下可不作考虑。


相关文章

  • [翻译] MySQL 之 InnoDB 中的 ACID

    官方文档:15.2 InnoDB and the ACID Model 一、ACID 介绍 ACID 模型是针对那...

  • ACID

    https://dev.mysql.com/doc/refman/8.0/en/glossary.html#glo...

  • ACID

    ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的...

  • ACID

    ACID ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Cons...

  • ACID

  • ACID

    数据库事务的四大特性:ACID

  • ACID

    事务具有4个特征,分别是原子性、一致性、隔离性和持久性,简称事务的ACID特性; 一、原子性(atomicity)...

  • ACID

    事务 在说起ACID之前,需要知道什么是事务,事务是一个不可再拆分的最小单位,要么整个执行,要不整个回滚。 什么是...

  • ACID

    https://www.jianshu.com/p/fc8a654f2205[https://www.jiansh...

  • DDIA 读书笔记 chapter 7 事务 part1

    ACID 我们经常使用ACID(Atomicity, Consistency, Isolation, Durabi...

网友评论

      本文标题:ACID

      本文链接:https://www.haomeiwen.com/subject/tzpiextx.html