查看: 89|回复: 0

ACID 四大特性、提交回滚与业务开发规范

[复制链接]

849

主题

1

回帖

2602

积分

超级版主

积分
2602
发表于 2026-8-15 09:49:08 | 显示全部楼层 |阅读模式
前言
后端开发、数据库面试高频核心知识点 ——事务,几乎所有金融、电商、订单、库存系统都离不开它。日常开发中转账资金丢失、商品超卖、订单创建成功但库存未扣减等线上故障,根源大多是事务使用不当。
本文以银行转账为通俗主线,拆解事务定义、ACID 四大核心特性、底层实现原理,搭配 MySQL 实操代码、电商业务场景,同时讲解长事务危害、单体事务局限与分布式事务基础认知,适合新手入门、技术博客发布、面试复习。

一、什么是数据库事务?为什么必须用事务?

1. 事务核心定义

事务是一组关联数据库操作的最小执行单元,数据库会把多条 SQL 打包成一个不可分割的整体,执行结果只有两种:全部成功生效,或全部撤销回滚,不存在 “执行一半” 的中间状态。
2. 无事务会引发灾难性数据错乱(经典转账案例)

场景:你给好友转账 100 元,系统需要连续执行两步 SQL:
  • 己方账户余额 -100
  • 好友账户余额 +100
如果没有事务保护,中途出现网络中断、数据库宕机、程序报错:
  • 第一步扣款成功,第二步加款失败;
  • 你的钱凭空消失,好友账户无入账,形成资金黑洞;金融系统绝对无法容忍这类数据漏洞,事务就是用来彻底杜绝半成品操作。
3. 现实中大量依赖事务的业务场景

  • 金融:转账、充值、提现、账务流水;
  • 电商:下单扣库存、生成订单、锁定优惠券、支付记录;
  • 企业系统:用户注册(用户表 + 权限表同步写入)、商品上下架、库存盘点;
  • 票务系统:购票锁定座位、退款释放库存,防止超卖。
二、事务四大核心特性:ACID 完整详解

ACID 是事务的底层标准,MySQL InnoDB 通过 Undo Log、Redo Log、锁机制协同实现四大特性,下面结合转账场景通俗拆解,附带底层实现原理。
1. A - Atomicity 原子性(不可分割)

  • 含义:事务像微观原子,无法拆分,所有操作要么全部完成,要么全部作废,无中间状态。
  • 转账体现:扣款、加钱两条 SQL 必须同时成功;任意一步异常,数据库自动撤销已执行的修改,双方余额恢复原样。
  • 底层实现:Undo Log(回滚日志)事务执行前记录修改前的数据快照,一旦失败,依靠 Undo Log 完成回滚,消除所有临时修改。
2. C - Consistency 一致性(数据符合业务规则)

  • 含义:事务执行前后,数据库始终满足预设约束与业务逻辑,从一个合法状态切换到另一个合法状态。
  • 转账体现:转账前后两个账户总金额不变;库存不能出现负数;账户余额不能凭空增减。
  • 补充:一致性不是事务单独实现,是原子性、隔离性、持久性 + 数据库约束(主键、唯一、外键)共同保障的结果;事务不会修复错误业务逻辑,只会保证正确逻辑完整执行。
3. I - Isolation 隔离性(并发互不干扰)

  • 含义:多事务并发操作同一份数据时,彼此隔离,不会互相读取到对方未提交的脏数据,避免并发计算错乱稀土掘金。
  • 转账场景举例:账户余额 100 元,同时发起两笔 80 元转账。若无隔离,两个事务同时读取余额 100,都完成扣款,最终余额变成 - 60,造成透支;隔离性通过锁、MVCC 多版本并发控制规避该问题。
  • 底层实现:行锁、表锁、MVCC 多版本快照,对应四种事务隔离级别(读未提交、读已提交、可重复读、串行化)。
4. D - Durability 持久性(提交永久生效)

  • 含义:事务执行COMMIT提交成功后,修改永久写入磁盘,哪怕服务器断电、数据库崩溃、硬盘故障,重启后数据依然保留,不会丢失。
  • 转账体现:页面提示转账成功,就算数据库立刻宕机,重启后转账记录、双方余额变更不会消失。
  • 底层实现:Redo Log(重做日志)+ WAL 预写日志机制数据修改先写入日志再刷盘,崩溃后通过 Redo Log 恢复已提交事务。
ACID 速查表

特性中文名称核心作用MySQL 底层支撑
Atomicity原子性杜绝半成功操作,支持回滚Undo Log
Consistency一致性保证数据符合业务与字段约束锁 + 日志 + 数据库约束
Isolation隔离性并发事务互不干扰,防止脏读、超卖行锁、MVCC
Durability持久性提交后数据永久保存,宕机不丢失Redo Log、WAL
三、事务完整执行流程:BEGIN、COMMIT、ROLLBACK

1. 三大核心指令

  • START TRANSACTION / BEGIN:手动开启事务,关闭自动提交;
  • COMMIT:全部 SQL 执行无误,提交事务,修改永久生效,释放锁;
  • ROLLBACK:出现异常、业务校验失败,回滚所有临时修改,恢复初始数据,释放锁。
2. 转账完整 MySQL 实操示例

  1. -- 1. 开启事务
  2. START TRANSACTION;

  3. -- 2. 业务校验:余额不足直接回滚
  4. IF (SELECT balance FROM account WHERE id = 1) < 100 THEN
  5.     ROLLBACK;
  6.     SELECT '余额不足,转账失败';
  7. ELSE
  8.     -- 3. 扣款、加款、写入流水
  9.     UPDATE account SET balance = balance - 100 WHERE id = 1;
  10.     UPDATE account SET balance = balance + 100 WHERE id = 2;
  11.     INSERT INTO transfer_log(from_id,to_id,money) VALUES(1,2,100);
  12.     -- 4. 无异常提交,永久生效
  13.     COMMIT;
  14.     SELECT '转账成功';
  15. END IF;
复制代码
执行逻辑:事务开启后所有修改仅在临时缓存,其他会话看不到;只有COMMIT后全局可见;任意步骤报错自动触发回滚。

3. 电商防超卖事务示例(高频实战)
  1. BEGIN;
  2. -- 加排他锁锁定商品行,防止并发修改
  3. SELECT stock FROM product WHERE id = 1001 FOR UPDATE;
  4. -- 判断库存
  5. IF (SELECT stock FROM product WHERE id=1001) >= 1 THEN
  6.     UPDATE product SET stock = stock - 1 WHERE id = 1001;
  7.     INSERT INTO orders(product_id) VALUES(1001);
  8.     COMMIT;
  9. ELSE
  10.     ROLLBACK;
  11. END IF;
复制代码

四、开发避坑:长事务的巨大危害

很多新手会把查询、第三方接口调用、文件 IO、消息推送、循环计算全部塞进事务,形成长事务,线上风险极高:
  • 长期持有锁,引发大面积阻塞锁直到COMMIT才释放,事务几秒、几十秒不提交,其他修改同表的请求全部排队,接口超时、页面转圈;
  • Undo Log 堆积,数据库磁盘暴涨未提交事务会持续占用回滚日志,大量历史数据快照无法清理,磁盘占用持续上涨;
  • 死锁概率大幅提升事务持有锁时间越久,多事务争抢资源产生循环等待的概率指数上升;
  • 主从同步延迟加剧大事务产生大量 Binlog,从库回放速度跟不上主库,数据同步延迟拉大。
最佳开发规范

  • 事务只包裹必须保持一致的数据库操作
  • 第三方接口、HTTP 请求、日志打印、文件读写、缓存操作全部放到事务外部;
  • 批量更新拆分小事务,分批提交,避免一次性锁定上千行;
  • 代码逻辑尽早提交 / 回滚,缩短锁持有时间。
五、单体事务的局限:分布式场景下失效

本文讲解的 ACID 事务,仅适用于单数据库、单服务(本地事务),现代微服务架构会出现跨库、跨服务场景:例如下单流程:订单库创建订单、库存库扣减库存、支付库创建支付记录,三个独立数据库,单库事务无法管控其他库数据
此时本地事务失效,会出现:订单创建成功、库存扣减失败,数据不一致。行业解决方案统称分布式事务,主流方案:
  • 2PC(XA 两阶段提交):强一致,但锁阻塞严重,互联网极少使用;
  • TCC、Saga、可靠消息最终一致性:柔性事务,牺牲瞬时强一致换取高可用,适配电商、微服务场景。
六、总结

  • 事务是数据库保障数据可靠的核心机制,核心作用是让多步关联操作要么全成、要么全退;
  • ACID 四大特性各司其职:原子性保证无半成品、一致性保证数据合规、隔离性解决并发冲突、持久性防止宕机丢数据;
  • COMMIT提交固化修改,ROLLBACK回滚撤销操作,线上金融、库存场景必须手动管控事务;
  • 开发严禁长事务,减少锁持有时间,降低阻塞、死锁风险;
  • 单库用本地 ACID 事务,微服务多库场景需采用分布式柔性事务方案。
转账资金异常、商品超卖、订单与库存数据不同步,本质都是事务设计缺陷。掌握事务底层逻辑与开发规范,是后端开发、数据库运维的必备基础能力。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|天翼网

相关侵权、举报、投诉及建议等,请发 E-mail:2026@typc.net

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|晋ICP备2026008270号-1|晋公网安备14010602111293号

QQ客服返回顶部