MySQL数据库服务名词术语-ACID

MySQL数据库服务ACID出现背景

你知道什么是数据库ACID特性吗?
今天xiaoQ老师用3分钟教你学会数据库服务的这个概念

我们在开发银行、支付、电商这些架构应用系统时,最怕什么?
数据出错,交易失败,余额混乱
因此出现了数据的四大金刚--ACID特性,这4个数据库的特性正是为了让这些灾难不在发生而诞生出来的。

MySQL数据库服务ACID特性概述

ACID是四个英文单词的缩写,分别代表:

特性标识 英文解释 中文解释
A Atomicity 原子性
C Consistency 一致性
I Isolation 隔离性
D Durability 持久性

MySQL数据库服务ACID特性-原子性(A)

原子性保证什么:
事务要么全部成功,要么全都不发生,不能只做一半

原子性举例说明:

类似你转账给朋友,从你的账户扣100元,朋友账户加100元;
这两个操作必须一起完成,否则钱就“丢”了。

原子性异常情况:
如果中途服务宕机也不用担心,数据库会使用日志机制,把已经做的操作记录下来;
一旦出现问题,所有操作会统统回滚,就像这笔转账从未发生过一样。

原子性总结说明:
原子性就是“要么全做,要么全不做”,交易是不可分割的整体。

MySQL数据库服务ACID特性-一致性(C)

一致性保证什么:
数据库就像一个守规矩的老管家,需要时刻保持数据合乎规则

一致性举例说明:

类似设定你账户余额不能为负数,如果有人视图从余额只有50元的账户取出100元;
数据库就会马上制止,说“不行,这不合规”,并终止事务。

一致性总结说明:
一致性保证,任何交易完成后,数据库都要处于合法状态,哪怕中途遇到多少风波。

MySQL数据库服务ACID特性-隔离性(I)

隔离性保证什么:
隔离性名字听起来像防病毒软件,其实它管的是“同时发生的交易互不干扰”

隔离性举例说明:

现实系统中,多个用户可能同时在用数据库,我们希望每笔交易都像自己独占数据库一样运行。
最高级别的隔离性叫“可串行化”,意思是每笔交易像排队买奶茶一样,一个一个来,最安全,但也最慢;

为了加快速度,数据库允许一些隔离级别较低,比如:“读已提交”,“可重复读”等,但这样也可能出现一些诡异情况;

MySQL数据库读取数据异常-脏读

脏读概念介绍:
你读取了另一个还没提交的交易数据,人家一回滚,你读到的内容就像梦一样不存在。

脏读案例分析:
比如账户原本有100元,某个交易暂停时减掉了20元还没提交;
你这时查余额看到80元,以为是真实的,结果那笔交易失败回滚,余额其实还是100元;
你刚才看到的就是“鬼影数据”,根本没发生,典型的脏读问题。

MySQL数据库读取数据异常-不可重复读

不可重复读概念介绍:
你查了两次数据,结果变了,因为有其他交易中途改了它。

不可重复读案例分析:
比如你查询账户余额是100元,接着在你还没结束事务的情况下,另一个交易悄悄地把余额改成了80元并提交。
你再查一遍余额,这次就变成80元。
你两次查询结果不一样,让你产生“怎么回事”的困惑,这种情况就是不可重复读。

MySQL数据库读取数据异常-幻读

幻读概念介绍:
你跑了个查询,结果突然多出一条数据,因为其他人刚插入了一条满足条件的新记录。

幻读案例分析:
比如你正在查所有转账金额小于100元的记录,一开始返回5条记录;
另一个交易在这时插入了一笔金额为50元的新转账,并提交了。
当你再次运行相同的查询,结果却变成了6条,那新增的一条就像凭空“冒出来”的幻影,这就是幻读

读取数据问题总结:
以上3种读取数据情况,看起来像是数据“变魔术”一样,但其实是隔离性不够导致的。
为了防止这些问题,隔离级别越高,越安全,但性能越低。
开发者需要进行权衡,选出最适合自己系统的隔离策略。

MySQL数据库服务ACID特性-持久性(D)

持久性保证什么:
这是ACID里的终极保障,意思是:一旦交易完成提交,就永远不会丢失。
哪怕数据库立刻断电崩溃,只要你说了“提交”,那数据就是“铁板钉钉”。

持久性实现原理:
靠写日志、写磁盘、甚至在分布式数据库中,把数据复制到多个节点。
哪怕一个节点炸了,其他节点还能恢复你的交易记录。

MySQL数据库服务ACID特性总结

ACID四大特性是数据库世界的四根支柱:

特性标识 英文解释 中文解释 特性描述
A Atomicity 原子性 交易不可拆分
C Consistency 一致性 需要遵守规则
I Isolation 隔离性 互相不会干扰
D Durability 持久性 数据永不丢失

粉丝大佬们,对此章节内容有疑问,可以在评论区交流讨论~

posted @ 2025-08-04 21:52  aiweiwei24  阅读(107)  评论(0)    收藏  举报