Skip to content

2.4 事务与一致性

一句话

一致性是目标,事务是手段。

事务和一致性是什么?

在后端开发中,事务一致性是两个核心概念,主要用来确保系统在处理多步操作时,数据的完整性和准确性。

事务(Transaction)

事务是一组操作的集合,要么全部成功,要么全部失败。
假如事务中的某一步操作失败,系统会回滚之前的所有操作,让数据恢复到事务开始前的状态。

事务的特性:ACID

事务具有四大特性,简称 ACID

  1. 原子性(Atomicity):

    • 事务是不可分割的,所有操作要么全部成功,要么全部失败。
    • 比喻:买东西时,钱和商品的交换是原子性的,要么交易成功,要么双方恢复原样。
  2. 一致性(Consistency):

    • 事务完成后,数据必须满足系统定义的规则,不能出现不符合规则的状态。
    • 比喻:银行转账后,总金额不变。
  3. 隔离性(Isolation):

    • 不同事务之间互不干扰,事务执行的结果不受其他事务的影响。
    • 比喻:超市里,两个顾客结账互不影响。
  4. 持久性(Durability):

    • 一旦事务提交成功,数据的变更将永久保存,即使系统崩溃也不会丢失。
    • 比喻:存款成功后,银行的账本永远记下这笔钱。

事务的例子

银行转账:

  • 小明要给小红转账 100 元。
  1. 从小明账户扣 100 元。
  2. 向小红账户加 100 元。

如果任何一步失败(比如网络中断),事务会回滚,让小明账户和小红账户的余额保持不变。

一致性(Consistency)

一致性保证了数据始终是正确的、符合规则的状态。
系统中的每次操作和变化都需要遵循一致性约束。

一致性的例子

  1. 银行转账:

    • 转账完成后,总金额保持不变。
    • 如果小明账户减少了 100 元,小红账户必须增加 100 元,不能多也不能少。
  2. 订单系统:

    • 一个订单完成后,商品库存应该相应减少。
    • 如果商品被扣减了库存,但订单没有生成,数据就是不一致的。

事务和一致性的关系

  • 事务是实现一致性的重要工具。
  • 在一个事务中,通过保证原子性隔离性,最终实现数据的一致性
  • 一致性是目标,事务是手段。

事务与一致性在实际开发中的作用

场景 1:电商下单

操作:

  1. 用户支付成功。
  2. 生成订单记录。
  3. 扣减商品库存。

如果某一步失败(如库存不足),整个操作需要回滚,确保一致性。

场景 2:多人同时修改数据

多个用户同时操作同一份数据时,事务通过隔离性避免数据冲突,确保最终数据一致。

总结

  • 事务: 保证一系列操作要么全部成功,要么全部失败。
  • 一致性: 确保数据始终是正确的、符合规则的状态。
  • 两者关系: 事务是实现一致性的核心工具。