MySQL 事务

MySQL 事务

事务是 MySQL 中保证数据原子性、一致性、隔离性、持久性(ACID) 的核心机制,主要用于处理多步操作组成的业务场景(如转账、订单创建等),避免因中间步骤失败导致数据混乱。

事务的 ACID 特性

特性 核心含义
原子性(Atomicity) 事务中的所有操作“要么全部成功,要么全部失败回滚”,无中间状态。
一致性(Consistency) 事务执行前后,数据库的完整性约束(如主键唯一、外键关联)不被破坏。
隔离性(Isolation) 多个事务并发执行时,一个事务的操作不会被其他事务干扰,各事务看到的数据独立。
持久性(Durability) 事务一旦提交,修改的数据会永久保存到磁盘,即使数据库崩溃也不会丢失。

事务的常见操作

-- 1. 开启事务(默认自动提交关闭)
START TRANSACTION;  -- 或 BEGIN;
-- 2. 执行业务操作(如转账:A账户减100,B账户加100)
UPDATE account SET balance = balance - 100 WHERE id = 1;  -- A账户
UPDATE account SET balance = balance + 100 WHERE id = 2;  -- B账户
-- 3. 提交事务(成功时,永久生效)
COMMIT;
-- 4. 回滚事务(失败时,撤销所有操作)
ROLLBACK;

-- 可选:设置保存点(部分回滚)
SAVEPOINT sp1;  -- 创建保存点sp1
UPDATE account SET balance = balance - 50 WHERE id = 1;  -- 额外操作
ROLLBACK TO sp1;  -- 回滚到sp1,仅撤销“减50”的操作,保留“减100”的操作

事务隔离级别(解决并发问题)

MySQL 支持 4 种隔离级别,默认级别为 Repeatable Read(可重复读),不同级别对并发问题的解决能力不同:

隔离级别 脏读(读未提交) 不可重复读(读已提交) 幻读(批量读不一致) 并发性能
Read Uncommitted 允许 允许 允许 最高
Read Committed 禁止 允许 允许 较高
Repeatable Read 禁止 禁止 禁止(MySQL 特有优化) 中等
Serializable 禁止 禁止 禁止 最低
  • 脏读:一个事务读取到另一个事务未提交的修改(如 A 转账给 B,未提交时 B 看到余额增加,后 A 回滚,B 看到的是“脏数据”);
  • 不可重复读:同一事务内多次读取同一数据,结果不一致(如 A 事务读 B 余额为 100,B 事务修改余额为 200 并提交,A 事务再次读时变为 200);
  • 幻读:同一事务内多次执行批量查询,结果行数不一致(如 A 事务统计账户数为 10,B 事务新增一个账户并提交,A 事务再次统计变为 11)。
posted @ 2025-10-29 15:56  Jing61  阅读(6)  评论(0)    收藏  举报