当前位置: 首页 > news >正文

什么是事务?事务的生命周期,四大属性(ACID重要)

事务是数据库管理系统中的一个核心概念。简单来说,事务可以被看作一系列数据库操作的集合,这些操作被逻辑地组合成一个不可分割的工作单元。

为了让这个概念更具体,我们可以从几个角度来理解:

1. 一个经典的比喻:银行转账

假设你要从账户A向账户B转账100元。这个看似简单的动作,在数据库里至少需要两步操作:

操作1: 从账户A的余额中减去100元。

操作2: 在账户B的余额中增加100元。

如果没有“事务”,可能会发生以下问题:

系统在执行完操作1后突然崩溃,操作2没有完成。结果A的钱没了,B的钱也没收到,数据就出错了。

在转账过程中,另一个人正在查询A和B的总余额,他可能会看到A的钱已经扣了,但B的钱还没加上,得到一个错误的总数。

有了“事务”,这两步操作就被打包成了一个整体。事务会确保:

要么全部成功: 两步操作都顺利完成,然后提交,修改永久生效。

要么全部失败: 如果任何一步出错(比如系统崩溃、余额不足),整个事务会回滚。数据库会撤销已经执行的操作,让A和B的余额恢复到转账前的状态。

所以,事务是一个最小的工作单元,不允许有“部分成功”的状态。

2. 事务的生命周期

一个典型的事务通常遵循以下流程:

开始事务:标记一个工作单元的开始。

执行操作:执行一系列的增、删、改、查操作。这些操作在事务内部是暂时性的,对其他事务可能不可见(取决于隔离级别)。

提交事务:如果所有操作都成功,则提交事务。此时,所有更改会被永久地、安全地保存到数据库中。

回滚事务:如果在执行过程中遇到任何错误,或者在业务逻辑上需要取消,则回滚事务。数据库会将所有已执行的操作撤销,恢复到事务开始前的状态。

3. 为什么需要事务?—— 解决两大核心问题

保证数据的完整性:防止因系统故障、并发操作等导致的数据不一致问题(如转账中A扣款B未加钱的情况)。

简化复杂业务逻辑:开发人员可以将一组复杂的操作当作一个原子单元来处理,只需关心“是否成功”,而不必为每一步操作都编写复杂的错误处理和恢复代码。

事务的四大属性,通常被称为 ACID,是数据库管理系统中确保数据可靠性的核心原则。

具体包括:

1. 原子性

含义:事务中的所有操作要么全部成功执行,要么全部不执行。不存在“执行了一部分”的情况。
例子:银行转账(A转给B 100元)。原子性保证“A账户扣款100元”和“B账户到账100元”要么都发生,要么都不发生。如果扣款后系统崩溃,事务会回滚,A的余额保持不变。

2. 一致性

含义:事务必须使数据库从一个“正确的状态”转变到另一个“正确的状态”。它确保事务不破坏数据的完整性约束(如外键、唯一索引、触发器规则等)。
例子:转账前后,两个账户的总金额应保持不变。如果A扣了100,B只加了90,一致性就被破坏了。

3. 隔离性

含义:多个事务并发执行时,一个事务的执行不应被其他事务干扰。每个事务感觉就像在独立运行一样。通常通过锁或多版本并发控制实现。
例子:A和B同时操作同一个账户。隔离性能防止A读取到B未提交的中间数据(脏读),或避免因并发导致计算错误。

4. 持久性

含义:一旦事务被提交,它对数据库的修改就是永久性的。即使随后发生系统崩溃、断电或重启,修改的数据也不会丢失。
例子:你转账成功并看到“交易完成”后,即使数据库立刻断电,重启后这笔转账记录和余额变动仍然存在。

简单记忆:ACID

A tomicity(原子性)
C onsistency(一致性)
I solation(隔离性)
D urability(持久性)

这四个属性共同保证了数据库在正常操作和系统故障下都能处理可靠、正确的数据。

http://www.jsqmd.com/news/578681/

相关文章:

  • SLB和Azule Energy扩大企业数字化运营规模以强化安哥拉能源供应
  • 写完论文才发现:原来好写作AI才是本科毕业的“隐藏外挂”
  • 数学专业考CDA数据分析师证书值不值?适合哪些求职方向和岗位
  • 50万行源码意外泄露:Anthropic“翻车”给AI开发者敲响了什么警钟?
  • 详解Kadane算法(附C++实现)—— 一维最大子段和最优解法
  • 破解非标设计人才供需错配:苏州非标机械设计培训机构如何通过3+1全链路实战方法论实现高质量就业? - 博客湾
  • 为什么某系统我们没有源代码,却比有源代码的高级工程师更能看透这个系统
  • 嵌入式ONPS协议栈:轻量级TCP/IP实现与优化
  • 剑指offer-19、顺时针打印矩阵
  • 当 AI 开始自己写代码,我更在意的是它到底做了什么
  • OpenClaw多模型切换实战:千问3.5-35B-A3B-FP8与文本模型的协作流程
  • 低成本自动化:OpenClaw+Gemma-3-12b-it替代Zapier的5个场景
  • ASA5545防火墙引入路由
  • 10个数字的冒泡排序魔法
  • 三次转身 一生向光:江俊在社群团购的路上奔跑 - 博客湾
  • 卸载Postman:ChatGPT调试API的致命效率
  • OpenClaw文件管理革命:Qwen3.5-9B智能分类与重命名方案
  • Go Channel 缓冲区机制分析
  • 十款GitHub中文爆款项目推荐,马上收藏使用,关注日常更新爆款项目
  • SEO_网站SEO排名下降的五大原因及应对技巧
  • VS Code 安装插件显示 Mermaid 渲染图完整手顺
  • 火山引擎做平台,易元AI做“应用”——谁更适合电商老板?
  • 矩阵是一种常见的二维数据结构,类似于一张表格
  • 数字IC设计的未来:ChatGPT能否颠覆十大核心领域?
  • 家庭实验室必备:OpenClaw监控路由器日志并告警
  • SEO 网站结构优化技巧是什么
  • 第 1 章 Python 基础 知识点精讲
  • 从NTU-RGB+D到实际应用:如何用这个数据集训练一个摔倒检测模型?
  • 基于SpringBoot的特色美食分享系统
  • Go Context 取消信号机制分析