了解 ACID 与 Transaction:别让你的数据库因基础错误而‘崩溃’!

发布: (2026年5月9日 GMT+8 11:00)
4 分钟阅读
原文: Dev.to

Source: Dev.to

Transaction 是什么?

Transaction 是一组操作(读取、写入、更新、删除)的集合,被打包并作为单一逻辑单元来处理。它的目标是把数据库从一个合法状态转变为另一个合法状态。事务的生存原则是:要么完成它的所有操作,要么一个也不执行

经典例子:从储蓄账户向活期账户转账。此操作包括两步:

  1. 从储蓄账户扣款。
  2. 向活期账户加款。

如果扣款成功后网络出错,未能及时加款怎么办?Transaction 会自动 rollback 整个过程,恢复储蓄账户的金额。

ACID 原则

成分描述
A – Atomicity(原子性)事务是一个不可分割的块。只有 开启(全部成功)或 关闭(全部撤销)两种状态。
C – Consistency(一致性)事务必须把数据库从一个合法状态转变为另一个合法状态,遵守所有约束(主键、外键等)。
I – Isolation(隔离性)并发执行的事务互不干扰或“踩踏”。每个事务的行为就像它是唯一正在运行的事务。
D – Durability(持久性)当事务成功 commit 后,修改会永久写入磁盘,即使服务器掉电也不会丢失。

Transaction 的标准生命周期

  1. BEGIN TRANSACTION – 标记操作序列的起点。
  2. 执行 SQL 语句 – INSERT、UPDATE、DELETE(数据通常先写入缓冲区或日志)。
  3. COMMIT TRANSACTION – 若所有操作成功,将数据写入磁盘。
  4. ROLLBACK TRANSACTION – 若出现任何错误,撤销所有更改,使数据库恢复到之前的状态。

实际示例 (SQL)

START TRANSACTION;

UPDATE TaiKhoan SET SoDu = SoDu - 100000 WHERE ID = 'TK001';
UPDATE TaiKhoan SET SoDu = SoDu + 100000 WHERE ID = 'TK002';

-- Kiểm tra điều kiện (pseudo-code)
IF (Lỗi Xảy Ra) THEN
    ROLLBACK;
ELSE
    COMMIT;
END IF;

何时应该使用 ACID?

  • 金融与银行系统(转账、账本管理)。
  • 电子商务(订单处理、库存管理)。
  • 敏感数据管理系统(医疗记录、个人信息)。
  • 核心业务应用(ERP、CRM)。

何时不应强行使用 ACID?

  • 需要极高吞吐量和极低延迟的系统(日志分析、实时大数据处理)。
  • 大规模分布式系统,因为在分布式集群上维护 ACID 非常复杂且耗资源。

NoSQL 中的 BASE 概念

BASE(Basically Available, Soft state, Eventually consistent)强调可用性和可扩展性,接受在短时间内数据不一致的情况。
例子:在社交网络上点击“赞”,点赞数的同步可能需要几秒钟才能在整个系统中统一——这是可以接受的(最终一致)。

结论

ACID 与 Transaction 是设计稳健系统的基础知识。掌握这些原理有助于做出正确的架构决策:何时需要严格的一致性(ACID),何时可以放宽以提升速度和扩展性(BASE)

你是否遇到过因脏数据或 Transaction 设计错误导致的 bug?欢迎在评论区分享! 👇

🔥 想进一步学习数据库、SQL JOIN 或后端技术,欢迎访问 blog ITPrep 阅读更多实战干货!

0 浏览
Back to Blog

相关文章

阅读更多 »

当稳定性提升性能时(线程)

当稳定性提升时,性能提升常被认为在并发系统中是不可能的——添加安全机制、锁或 routing constraints 通常会带来负面影响。