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

事务四大特性(ACID)、四大隔离级别、Spring 七大事务传播行为

事务是数据库保证数据安全、可靠、一致的核心机制,也是后端开发与运维必须掌握的基础核心知识点。

一、事务四大特性(ACID)

事务是一组不可分割的数据库操作序列,要么全部执行成功,要么全部执行失败。四大特性是事务的基石,分别保证操作、数据、并发、持久化层面的可靠性。

1.1 原子性(Atomicity)

定义:事务是最小执行单元,内部所有 SQL 操作不可分割,必须同时成功或同时失败回滚。

为什么需要原子性?

避免业务操作执行一半导致数据错乱。

场景:银行转账

账户 A 扣除 100 元、账户 B 增加 100 元两步操作。若扣款成功、加款失败,资金将凭空消失,原子性可杜绝此类问题。

实现机制:

依靠 Undo Log 回滚日志实现。执行修改前记录数据旧值,事务异常或回滚时,根据 Undo Log 恢复原始数据,保证事务执行前后状态一致。

1.2 一致性(Consistency)

定义:事务执行前后,数据库的完整性约束、业务规则始终合法,数据从一个合法状态迁移到另一个合法状态。

为什么需要一致性?

保证数据永远符合业务逻辑,不出现非法数据。

典型场景:

商品库存不能为负数、订单金额必须与明细总和一致、主键与唯一索引不可冲突等。

实现机制:

依靠数据库约束,包括主键、外键、唯一键、非空约束;由原子性、隔离性、持久性共同保障;同时配合应用层业务逻辑校验。 一致性是事务的最终目标,原子性、隔离性、持久性是实现一致性的手段。

1.3 隔离性(Isolation)

定义:多个并发事务同时执行时,相互隔离、互不干扰,一个事务不会看到另一个事务未提交的中间状态。

为什么需要隔离性?

高并发场景下,多事务同时读写同一数据会导致数据混乱,出现脏读、不可重复读、幻读等问题,隔离性用于避免这类异常。 实现机制 通过锁机制实现,包括行锁、表锁、间隙锁;依托 MVCC 多版本并发控制,实现读不加锁、读写不冲突;并通过事务隔离级别平衡并发性能与数据安全。

1.4 持久性(Durability)

定义:事务一旦提交成功,对数据的修改将永久保存,数据库宕机、重启也不会丢失。

为什么需要持久性 ?

保证已确认的业务结果不可逆,如支付成功、订单创建等操作结果不可丢失。

实现机制:

依靠 Redo Log 重做日志与 WAL 预写日志机制实现。先顺序写日志,再随机写数据文件;数据库崩溃重启后,通过 Redo Log 恢复已提交数据,保证提交操作永久生效。

二、事务四大隔离级别

并发事务会带来脏读、不可重复读、幻读三大问题。按问题严重程度:脏读 > 不可重复读 > 幻读

数据库通过隔离级别控制并发可见性,级别越高越安全,但并发性能越低。

2.1 并发三大异常问题

(1)脏读(Dirty Read)

一个事务读到另一个事务未提交的数据,若对方回滚,该数据即为脏数据。

例如 :T1 修改库存为 90 未提交,T2 读到 90;随后 T1 回滚,库存恢复 100,T2 读到无效值。

危害是业务基于错误数据执行逻辑,导致数据错误。

(2)不可重复读(Non-repeatable Read)

同一事务内,多次读取同一行数据结果不一致,中间被其他事务修改并提交。

例如 :T1 第一次查询余额为 100,T2 修改为 80 并提交,T1 再次查询结果变为 80。 该问题主要针对 update、delete 操作。

(3)幻读(Phantom Read)

同一事务内,两次范围查询结果条数不一致,其他事务插入或删除数据并提交。

例如 :T1 查询余额大于 50 的记录共 1 条,T2 插入一条新数据并提交,T1 再次查询结果变为 2 条。 该问题主要针对 insert 操作。

2.2 四大隔离级别详解

(1)读未提交(Read Uncommitted)这是最低隔离级别,允许事务读取其他事务未提交的数据。 脏读、不可重复读、幻读三类问题均存在。 性能最高,但数据完全不可控,生产环境几乎不使用。

2)读已提交(Read Committed, RC)事务只能读取到其他事务已经提交的数据,解决了脏读问题,但仍存在不可重复读和幻读。 该级别为 Oracle、SQL Server 默认隔离级别,实现方式为语句级快照,每次查询都会生成新的数据版本。

(3)可重复读(Repeatable Read, RR)事务启动时生成全局数据快照,整个事务期间多次读取同一数据结果保持一致,解决了脏读和不可重复读问题,理论上仍存在幻读。 MySQL InnoDB 默认使用该级别,通过 MVCC 加间隙锁的组合,在实际业务场景中基本规避了幻读。 与 RC 的核心区别是,RC 每次查询生成新快照,RR 仅在事务启动时生成一次快照,全程使用同一版本。(4)串行化(Serializable)最高隔离级别,事务排队串行执行,读写相互阻塞,完全避免脏读、不可重复读、幻读所有问题。 数据安全性最高,但并发性能极低,仅用于金融、账务等对一致性要求极高且并发量小的核心场景。

三、Spring 事务七大传播行为

事务传播行为用于多个带事务方法相互调用时,定义事务如何传递、合并、新建、挂起,是业务层事务控制的核心。

传播行为主要解决三个问题:被调用方法是否需要事务;已有事务时,是加入、新建还是挂起;内外事务是否独立、回滚是否相互影响。

3.1 REQUIRED(必需的,默认,最常用)

规则为当前无事务则新建,有事务则加入。回滚机制为内外事务一体,任意异常全部回滚。 适用于下单、支付、扣库存等强一致性业务。

例如:创建订单、扣库存、记录日志的流程,必须同时成功或同时失败。

3.2 SUPPORTS(支持的)

规则为有事务则加入,无事务则以非事务方式运行。特点是不强制事务,性能更高。 适用于查询操作、列表获取、数据统计等对事务无强要求的场景。

3.3 MANDATORY(强制的)

规则为强制要求必须在已有事务内执行,无事务直接抛异常。 作用是防止核心逻辑被无事务调用,避免数据风险。 适用于核心扣款、库存扣减等关键子方法。

3.4 REQUIRES_NEW(需要新建)

规则为无论外部是否有事务,都新建独立事务。回滚机制为内外事务完全隔离,外层回滚不影响内层提交。 适用于操作日志、消息发送、计费记录等需要独立留存的场景。 例如下单失败主流程回滚,但下单失败的日志必须保留。

3.5 NOT_SUPPORTED(不支持的)

规则为始终以非事务方式执行,若外部存在事务则将其挂起。 特点是无回滚、无锁、性能极高。 适用于大批量数据导入、导出、文件同步等长耗时、无强一致性要求的操作。

3.6 NEVER(从不)

规则为强制要求在无事务环境下运行,若检测到当前存在事务直接抛异常。 适用于严禁在事务中执行的长耗时操作,避免长事务持有锁导致锁等待、系统卡顿。

3.7 NESTED(嵌套的)

规则为作为外层事务的子事务存在,拥有独立保存点 savepoint。 回滚机制为内层异常可仅回滚子事务,不影响外层;外层异常则内层必须回滚。 适用于复杂流程、多步骤审批、子任务需要局部容错的场景。

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

相关文章:

  • 一文讲清,排班管理系统是什么意思?排班管理系统如何优化企业用工?
  • 忍者像素绘卷参数详解:Steps=20/30/50对16-Bit像素块清晰度影响可视化分析
  • STM32F407驱动无刷电机:用CubeMX和HAL库快速实现SimpleFOC开环调速
  • 对于所有翻译从业者而言,唯有认清自身定位,敬畏信息、坚守操守、精进专业,才能在翻译之路上行稳致远。
  • 告别枯燥协议文档:用Wireshark抓包和Python脚本‘看见’JESD204B的链路建立过程
  • 2026年靠谱的哈尔滨步道板流水槽/哈尔滨步道板水泥盖板/黑龙江步道板水泥砖销售厂家推荐 - 品牌宣传支持者
  • Phi-3-vision多模态模型体验:用Chainlit前端轻松实现图片问答
  • AI开发-python-langchain框架(--提取pdf中的图片 )
  • Pi0机器人模型亲测体验:Web界面操作简单,动作生成快速
  • 别再手动算相位增量了!Vivado 2023.2里用Xilinx DDS IP核生成1MHz正弦波的保姆级教程
  • 前端手记(二):Axios 封装与 FastAPI 联调
  • 2026年靠谱的低噪音电机/电机定制/螺杆真空泵配套电机/定制化电机公司口碑推荐 - 行业平台推荐
  • AGI自主编写0day Exploit仅需23秒?实测GPT-5、Claude-4、Qwen-AGI在CVE-2024-XXXX系列漏洞上的武器化效率对比
  • 丹青幻境在儿童美育中的应用:AI辅助古诗配画与想象力激发教学实践
  • CSS如何解决栅格重叠问题_使用Grid-area明确划分元素占位
  • 从Arduino到树莓派:玩转开源硬件,你的‘地’接对了吗?避坑指南与实测对比
  • Pixel Language Portal 开发环境搭建:Windows 系统下 Visual Studio 与 Python 联调指南
  • 通义千问1.8B智能写作助手:快速部署教程,帮你生成营销文案和产品介绍
  • 2026年知名的四川机制岩棉净化板/四川机制中空玻镁净化板/净化板/机制硅岩净化板制造厂家推荐 - 行业平台推荐
  • 2026年评价高的全自动伺服压装机/伺服压装机/台式伺服压装机/半自动伺服压装机销售厂家推荐 - 行业平台推荐
  • 如何用 dispatchEvent 在 window 全局触发自定义的消息通知
  • 如何解决企业微信防封行业高封号率痛点
  • 2026年环境科学论文降AI工具推荐:环境评估和生态研究部分处理方案
  • 2026年比较好的浙江不锈钢拖把管/304材质不锈钢拖把管/金华不锈钢拖把管/园林工具不锈钢拖把管批量采购厂家推荐 - 品牌宣传支持者
  • 别让学习曲线劝退用户!6个原则做好体验设计
  • 2026年质量好的轧平钢板网/菱形钢板网厂家推荐 - 品牌宣传支持者
  • 2026年口碑好的高压电线缆/线缆/山东高压电线缆/山东铜芯线缆公司推荐 - 行业平台推荐
  • 别再死记硬背了!用Python代码实现NFA到DFA的转换(附完整源码)
  • Mem0私有化部署
  • 腾兴热点 | 马斯克打造超级计算机集群 小鹏从车企到AI集团 游宝阁用户突破5千万 Sora负责人离职