From a327b9e42452414d1f1bbf6b495c28ce267682c2 Mon Sep 17 00:00:00 2001 From: loulanyue <260355617@qq.com> Date: Tue, 9 Jun 2026 11:13:20 +0800 Subject: [PATCH] docs: add mysql transaction interview notes --- .../mysql/MySQL \344\272\213\345\212\241.md" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git "a/03-database/mysql/MySQL \344\272\213\345\212\241.md" "b/03-database/mysql/MySQL \344\272\213\345\212\241.md" index b5578c22..e94ba43d 100644 --- "a/03-database/mysql/MySQL \344\272\213\345\212\241.md" +++ "b/03-database/mysql/MySQL \344\272\213\345\212\241.md" @@ -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 增长。 + ---