事务的四大特性(ACID) - Higurashi

ACID 是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。

原子性 (Atomicity)

一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。

一致性 (Consistency)

  • 一种说法

    ACID 里的 AID 都是数据库的特征,也就是依赖数据库的具体实现。而唯独这个 C,实际上它依赖于应用层,也就是依赖于开发者。这里的一致性是指系统从一个正确的状态,迁移到另一个正确的状态。什么叫正确的状态呢?就是当前的状态满足预定的约束就叫做正确的状态。而事务具备 ACID 里 C 的特性是说通过事务的 AID 来保证我们的一致性。

    举个例子:

    A 要向 B 支付 100 元,而 A 的账户中只有 90 元,并且我们给定账户余额这一列的约束是,不能小于 0。那么很明显这条事务执行会失败,因为 90-100=-10,小于我们给定的约束了。

    这个例子里,支付之前我们数据库里的数据都是符合约束的,但是如果事务执行成功了,我们的数据库数据就破坏约束了,因此事务不能成功,这里我们说事务提供了一致性的保证。然后我们再看个例子:

    A 要向 B 支付 100 元,而 A 的账户中只有 90 元,我们的账户余额列没有任何约束。但是我们业务上不允许账户余额小于 0。因此支付完成后我们会检查 A 的账户余额,发现余额小于 0 了,于是我们进行了事务的回滚。

    这个例子里,如果事务执行成功,虽然没有破坏数据库的约束,但是破坏了我们应用层的约束。而事务的回滚保证了我们的约束,因此也可以说事务提供了一致性保证(事实上,是我们应用层利用事务回滚保证了我们的约束不被破坏)。最后我们再看个例子:

    A 要向 B 支付 100 元,而 A 的账户中只有 90 元,我们的账户余额列没有任何约束。然后支付成功了。

    这里,如果按照很多人的理解,事务不是保证一致性么?直观上账户余额为什么能为负呢。但这里事务执行前和执行后,我们的系统没有任何的约束被破坏。一直都是保持正确的状态。

    所以,综上。你可以理解一致性就是:应用系统从一个正确的状态到另一个正确的状态。而 ACID 就是说事务能够通过 AID 来保证这个 C 的过程。C 是目的,AID 都是手段。

  • 另一种说法

    在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。比如如果一个字段添加了非空约束,那么在尝试给该字段设置空数据时,会导致数据库的不一致状态,此时整个事务就应该回滚,以保证数据库的一致性。

隔离性 (Isolation)

数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括未提交读(Read uncommitted)、提交读(read committed)、可重复读(repeatable read)和串行化(Serializable)。

持久性 (Durability)

事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

参考:

ACID - 维基百科,自由的百科全书
如何理解数据库事务中的一致性的概念?
acid - database atomicity consistency

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025.10.24

今天学习了二叉树的层序遍历

以 “教练” 之姿引航,以 “实践” 之径求知

原文:优秀的教学方法---做教练与做中学 https://www.cnblogs.com/rocedu/p/4999535.html?winzoom=1 翻开娄老师这篇关于 “做教练” 与 “做中学” 的博文,重构了我对教与学认知。没有用晦涩的理论堆砌,而是以鲜活…

java:logform

/*** encoding: utf-8* 版权所有 2025 ©涂聚文有限公司 * 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:* Author : geovindu,Geovin Du 涂聚文.* IDE : IntelliJ IDEA 2024.3…

小作业 13(2023 年北京高考圆锥曲线)

椭圆 \(E:\dfrac{x^2}{a^2}+\dfrac{y^2}{b^2}=1\)(\(a>b>0\))的离心率为 \(\dfrac{\sqrt{5}}{3}\),\(A\)、\(C\) 分别为 \(E\) 的上、下顶点,\(B\)、\(D\) 分别为 \(E\) 的左、右顶点,\(|AC|=4\)。点 \(P\)…

DeepSeek-OCR 本地部署实践(适合新手、windows环境)

上效果:结论:windows官方示例仅可转换图片,linux下官方示例可转图片和PDF文件。 原因是转换PDF的代码用到了vllm,vllm仅可在linux系统下部署使用。(仅官方示例,如果自己编写代码进行PDF转图片,并处理多张图片的…

10月24日日记

1.今天学习英语 2.明天出去看博物馆 3.平衡二叉树(AVL、红黑树)为什么需要旋转操作?

2025.10.24总结 - A

今天没课,加油

2025年AI优化:AI优化公司技术实力哪家好

AI优化服务商:解锁企业智能增长的密钥 ——2025年AI优化企业核心实力与实战价值深度解析 AI优化企业如何重构数字竞争生态? 第一部分:AI优化企业排行榜——技术穿透力与商业价值的双重验证 在生成式AI重构商业规则的…

总账系统核心设计 - 智慧园区

在企业数字化转型的浪潮中,总账系统不仅是财务管理的底座,更是业务与财务融合的关键枢纽。本文将从架构设计、数据流动、权限控制等核心维度出发,系统拆解总账系统的设计要义,助力财务信息化从“可用”走向“高效”…

02 MULTI IDE软件安装及新建工程

02 MULTI IDE软件安装及新建工程1.MULTI-IDE简介 MULTI IDE是Green Hills Software提供的一款专业级集成开发环境(Integrated Development Environment),专为嵌入式系统开发设计,配合GHS编译器和调试器,广泛用于汽…

10月24号

今天进行了复习。 晚上进行了外语学习。

10月阅读笔记(3)

《程序员修炼之道:从小工到专家》阅读笔记 作为一名大二计算机专业学生,读《程序员修炼之道》前,我总觉得写代码就是“能跑通功能就行”——课后作业调通逻辑、实验报告凑够代码行数,就算完成任务了。但这本书像给…

使用Python将iOS快照从KTX格式转换为PNG

本文详细介绍了如何通过Python解析iOS设备中存储为KTX格式的应用快照文件,包括LZFSE解压缩、ASTC纹理数据转换等技术细节,并提供了完整的代码实现方案。KTX to PNG in Python for iOS snapshots iOS上的应用快照以KT…

我有一个好主意,既然我之前写了一个AI Vtuber

我有一个好主意,既然我之前写了一个AI Vtuber,那么为什么不直接挪过来替换掉看板娘呢? 还能做到实时共同

python操作pdf的库

import pdf2docx import PyPDF2 import spire 参考: https://www.cnblogs.com/geekbruce/articles/18427413

第二十天

今日专注于数据库核心的增删改查指令学习 写INSERT语句时,体会到“精准”是第一原则——字段名与值必须严格对应,少一个逗号、错一个数据类型,都会让数据无法顺利“入驻”表中,这像给档案柜分类归档,每一份资料都…

AI优化服务商:AI优化公司技术实力榜单

AI优化服务商:解锁智能搜索时代的流量密码 2025年AI优化企业核心价值与行业标杆解析 一、AI优化企业排行榜:技术实力与实战经验的双重验证 在生成式AI重塑搜索生态的2025年,企业竞争已从“关键词堆砌”转向“场景化…

Sentence Transformers

Sentence Transformers https://www.sbert.net/ https://github.com/huggingface/sentence-transformersSentenceTransformers Documentation Sentence Transformers (a.k.a. SBERT) is the go-to Python module for…