Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions 03-database/mysql/MySQL 事务.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,30 @@ mysqli_commit($conn); //执行事务
mysqli_close($conn);
?>

## 面试补充:事务隔离与锁治理

MySQL 事务题建议从 ACID、隔离级别、MVCC、当前读锁机制和工程治理五个层面回答。

### ACID 怎么落地

原子性依赖 undo log 支持回滚;持久性依赖 redo log 保证提交后可恢复;隔离性依赖 MVCC 和锁;一致性是业务约束、数据库约束和事务机制共同保证的结果。回答时不要只背概念,要能说明底层依赖。

### RC 与 RR 的区别

`Read Committed` 是语句级快照,每条查询读取新的已提交版本。`Repeatable Read` 是事务级快照,同一事务内普通快照读复用同一个 Read View,因此可重复读更强。MySQL InnoDB 默认 RR,很多交易系统会在 RR 下配合当前读保证更新安全。

### RR 如何处理幻读

普通 `select` 通过 MVCC 的一致性读让事务内结果稳定。`select ... for update`、`update`、`delete` 这类当前读依赖 next-key lock,也就是记录锁加间隙锁,阻止其他事务在锁定范围插入新记录,从源头避免当前读幻读。

### 事务与索引的关系

事务锁通常加在索引记录或索引间隙上。如果查询条件没有命中合适索引,可能扫描大量记录并扩大锁范围,导致并发下降。排查锁等待时要同时看 SQL 条件、执行计划、索引选择和事务持有时间。

### 慢事务治理

慢事务会长期持有锁、阻塞 purge、放大主从延迟。治理手段包括缩短事务范围、避免事务内远程调用、拆分批处理、降低单次更新行数、为核心更新补齐索引,并监控锁等待、死锁、事务耗时和 undo 增长。

---

<!-- note-nav:start -->
Expand Down