MySQL 事务

ACID、BEGIN/COMMIT/ROLLBACK,以及隔离级别。

Beginner
Key Points事务把多个操作打包成「全成功或全失败」的原子单元,靠 InnoDB 实现。

ACID 是什么

  • Atomicity 原子性 —— 要么全做,要么全不做
  • Consistency 一致性 —— 数据始终满足约束
  • Isolation 隔离性 —— 并发事务互不干扰
  • Durability 持久性 —— 提交后不丢

基本流程

SQL
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;          -- 都成功才提交
-- 出错时:ROLLBACK;  回滚到 BEGIN 之前
Output
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)

隔离级别

级别可能问题
READ UNCOMMITTED脏读
READ COMMITTED不可重复读
REPEATABLE READ(默认)幻读
SERIALIZABLE无(串行,最慢)
MySQL defaults to REPEATABLE READ with MVCC, enough for most cases. Use READ COMMITTED for 'see committed' semantics; SERIALIZABLE for strict consistency at a performance cost.

Friends & Partners