事务与隔离级别
ACID(简)
| 特性 | 含义 |
|---|---|
| A 原子性 | 要么全部提交,要么全部回滚 |
| C 一致性 | 事务前后满足业务约束(如余额守恒) |
| I 隔离性 | 并发事务互不干扰(由隔离级别调节) |
| D 持久性 | 提交后崩溃可恢复(InnoDB 依赖 redo 等机制) |
InnoDB 下事务能力完整;MyISAM 无事务。
并发问题(概念)
| 问题 | 含义 |
|---|---|
| 脏读 | 读到他事务未提交的修改 |
| 不可重复读 | 同一事务两次读同一行,值被别事务提交修改 |
| 幻读 | 同一事务内两次按相同条件读,因他事务插入等出现「多出来的行」;删除导致行数变少有时也归入广义并发异常,教材常强调插入场景 |
隔离级别(MySQL InnoDB)
| 级别 | 脏读 | 不可重复读 | 幻读(典型) |
|---|---|---|---|
| 读未提交 | 可能 | 可能 | 可能 |
| 读已提交 | 否 | 可能 | 可能 |
| 可重复读(默认) | 否 | 否 | InnoDB 下 一致性读(快照) 避免多数「不可重复读」;插入型幻读 对 当前读(如 SELECT … FOR UPDATE)用 间隙锁/临键锁 抑制,语义与「完全无幻读」仍以规范与语句类型为准 |
| 串行化 | 否 | 否 | 否 |
业务默认多在 RR;只读报表可考虑 RC(需评估语句与锁行为)。
实务命令(提要)
sql
START TRANSACTION;
-- 或 BEGIN;
COMMIT;
ROLLBACK;自动提交 autocommit 默认开启;显式事务时注意 持有锁时间,避免长事务。
小结
理解 隔离级别与并发异常 的对应关系;排查锁等待时结合 SHOW ENGINE INNODB STATUS(老接口仍常用)、Performance Schema(data_locks / events_statements_history 等)与慢查询日志。
