🌟 MySQL|事务



我们在谈论事务的时候,如果没有特指分布式事务,往往指的就是数据库事务

在分布式系统中,要保证 数据一致性,会遇到:

  • 网络延迟和失败(消息可能丢失或延迟)
  • 节点宕机(某个服务或数据库挂掉)
  • 时钟不同步(顺序难以保证)
  • CAP 定理:分布式系统不能同时完全满足一致性(C)、可用性(A)、分区容错性(P)。

所以,分布式事务 不能简单依赖传统数据库的 ACID,需要新的协议和机制。

数据库事务可以保证多个对数据库的操作(也就是 SQL 语句)构成一个逻辑上的整体。构成这个逻辑上的整体的这些数据库操作遵循:要么全部执行成功,要么全部不执行 。

1
2
3
4
5
6
# 开启一个事务
START TRANSACTION;
# 多条 SQL 语句
SQL1,SQL2...
## 提交事务
COMMIT;

关系型数据库(例如:MySQL、SQL Server、Oracle 等)事务都有 ACID 特性:

  • 原子性(Atomicity):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
  • 一致性(Consistency):执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;
  • 隔离性(Isolation):并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
  • 持久性(Durability):一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。