数据库的 ACID 属性是什么意思?
创始人
2025-07-08 19:21:20
0

我们说到数据库的时候,常常提到其 ACID 属性。那么 ACID 是什么意思呢?

ACID 是用来描述数据库事务的属性。反过来说,满足 ACID 属性的一系列数据库操作被称为事务。

下图解释了 ACID 在数据库事务中的含义。

图片图片

01 原子性(Atomicity)

事务中的写操作是一次性执行的,不能分解成更小的部分。如果在执行事务时出现故障,同一个事务中的写入将被回滚。应用程序可以安全地重试同一事务,而不会产生任何副作用。

因此,原子性意味着 "全有或全无"(All or Nothing)。

02 一致性(Consistency)

CAP 定理中的 "一致性 "是指每次读取都会收到最近的写入或错误。与 CAP 定理不同的是,这里的一致性是指保留数据库的不变性。事务写入的任何数据都必须符合事先定义的规则,并保持数据库处于良好状态。比如我们在数据库中设置了 Trigger 用来更新关联表,那么数据写入后必须保证其正确执行。

03 隔离(Isolation)

当有来自两个不同事务的并发写入时,这两个事务是相互隔离的。最严格的隔离是 "序列化"(serializability),即每个事务运行时都像数据库中唯一运行的事务一样。然而,这在现实中很难实现,所以我们通常采用较弱的隔离级别。

04 持久化(Durability)

事务提交后,即使系统发生故障,数据也会被持久化。数据库会使用预写日志(Write-Ahead Log)或类似机制来确保持久化。在分布式系统中,持久化意味着数据会复制到其他节点。

神书 DDIA (Designing Data Intensive Applications) 中关于 ACID 有几点很好的见地,值得我们思考:

  1. 一致性其实是应用程序的责任,而不是数据库的职责范围。应用程序可以使用原子性和隔离来保证数据的一致性。而数据库系统只能保证各种数据库规则被执行了。
  2. ACID 四个属性中只有隔离是用来描述并发情况的,原子性并不描述并发情况。
  3. 各个弱隔离级别都会带来一些限制,我们需要清楚其底层机制。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...