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

事务的四大特性

事务(Transaction)是数据库管理系统(DBMS)中用于保证数据操作正确性和一致性的核心机制。事务的特性通常用 ACID 四个字母概括,分别代表 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。以下是每个特性的详细说明:


1. 原子性(Atomicity)

  • 定义:事务中的所有操作要么全部成功,要么全部失败回滚。不允许事务只执行部分操作。
  • 作用:确保事务是一个不可分割的最小工作单元。
  • 示例
    银行转账场景中,如果从账户 A 转账到账户 B,事务必须同时完成 A 扣款B 入账。如果其中一步失败(如网络中断),整个事务会回滚,A 和 B 的余额保持不变。
  • 实现:通过 日志(Log) 记录事务的每一步操作,若发生异常,利用日志进行 回滚(Rollback)

2. 一致性(Consistency)

  • 定义:事务执行前后,数据库的完整性约束(如主键、外键、唯一性约束等)必须保持一致。
  • 作用:确保数据符合业务规则和数据库的预定义约束。
  • 示例
    在电商系统中,商品库存不能为负数。事务执行时,若订单扣减库存导致库存为负,事务必须失败,以保证数据一致性。
  • 实现:依赖数据库的 约束检查触发器(Triggers),结合事务的原子性共同保障。

3. 隔离性(Isolation)

  • 定义:多个事务并发执行时,彼此之间互不干扰,每个事务看到的数据状态是独立的。
  • 作用:防止并发操作导致的 脏读不可重复读幻读 等问题。
  • 隔离级别
    • 读未提交(Read Uncommitted):最低级别,允许读取未提交的数据(存在脏读)。
    • 读已提交(Read Committed):只能读取已提交的数据(避免脏读,但可能有不可重复读)。
    • 可重复读(Repeatable Read):确保事务内多次读取结果一致(避免脏读和不可重复读,但可能有幻读)。
    • 串行化(Serializable):最高级别,完全隔离事务(避免所有并发问题,但性能最差)。
  • 示例
    两个用户同时修改同一商品库存,隔离性确保事务不会互相覆盖或产生冲突。

4. 持久性(Durability)

  • 定义:事务一旦提交(Commit),其对数据库的修改是永久性的,即使系统崩溃或断电,数据也不会丢失。
  • 作用:确保数据持久化存储,避免因故障导致数据回滚。
  • 实现:通过 写入日志文件(Redo Log)磁盘持久化 机制,确保提交的数据被安全存储。

事务的典型应用场景

  1. 金融系统:转账、支付等操作必须保证数据一致性。
  2. 库存管理:扣减库存时需避免超卖。
  3. 订单处理:创建订单时需同步更新用户账户、商品库存等多张表。
  4. 分布式系统:跨服务的数据操作需要协调事务(如 两阶段提交TCC 模式)。

ACID 特性的权衡

  • 性能与一致性:隔离性越高(如串行化),并发性能越低;隔离性越低(如读未提交),性能更高但可能引入数据问题。
  • 分布式系统:传统 ACID 在分布式场景中难以完全实现,需采用 CAP 定理BASE 理论(基本可用、柔性状态、最终一致)进行权衡。

总结

ACID 特性是数据库事务的核心原则,确保数据操作的可靠性和一致性。在实际开发中,需根据业务需求选择合适的隔离级别,并合理处理事务的边界(如何时提交、回滚)。对于复杂场景(如分布式事务),需结合具体技术方案(如 Seata、Saga 模式)实现最终一致性。

http://www.dtcms.com/a/333718.html

相关文章:

  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘fairseq’问题
  • ubuntu安装docker
  • Python爬取推特(X)的各种数据
  • Higress AI网关
  • 新手入门 Makefile:FPGA 项目实战教程(三)
  • Android - 动态切换桌面图标
  • Rubber Band Optimation算法python实现
  • linux-----------------锁
  • [Chat-LangChain] 会话图(LangGraph) | 大语言模型(LLM)
  • 第二十四天:虚函数与纯虚函数
  • 速卖通平台关键字搜索商品列表列表接口实现指南:从接口分析到代码落地
  • Linux之高可用集群实战(二)
  • Tokenizer(切词器)的不同实现算法
  • 异步任务执行顺序
  • DC6v-36V转3.2V1A恒流驱动芯片WT7017
  • 【嵌入式C语言】五
  • 如何一个响指删除计算机里的一半文件?(二)
  • 【工具】多图裁剪批量处理工具
  • 基于element-plus和IndexedDB数据库的基础表单
  • 嵌入式:Linux软件编程:线程
  • 深入浅出的 RocketMQ-面试题解析
  • AI架构师生存手册:图解避坑MCP工具链/智能体RAG/推理蒸馏实战
  • TF 上架协作实战,跨部门配合下的内测发布节奏管理
  • Cursor CLI 技术解析:免费调用 GPT-5 的命令行方案
  • 工控机的用途与介绍:工业自动化的重要引擎
  • [激光原理与应用-287]:理论 - 波动光学 - 电磁波既能承载能量,又能承载信息?
  • Systemd Service 文件详解
  • 反射和类加载机制
  • Leetcode 最小生成树系列(2)
  • 深入解析 Monkey OCR:本地化、多语言文本识别的利器与实践指南