一、MySQL 基础(必会)
1️⃣ MySQL 逻辑架构
Client
↓
Server 层(连接器、分析器、优化器、执行器)
↓
存储引擎层(InnoDB / MyISAM)
↓
文件系统
✅ InnoDB 是默认存储引擎
2️⃣ 存储引擎对比(高频)
| 引擎 | 事务 | 锁 | 外键 | 崩溃恢复 |
|---|---|---|---|---|
| InnoDB | ✅ | 行锁 | ✅ | ✅ |
| MyISAM | ❌ | 表锁 | ❌ | ❌ |
✅ 99% 场景用 InnoDB
二、索引(面试之王 ⭐⭐⭐⭐⭐)
1️⃣ 索引作用
- 加快查询
- 约束数据(唯一、主键)
2️⃣ 索引类型
| 类型 | 说明 |
|---|---|
| 主键索引 | PRIMARY KEY |
| 唯一索引 | UNIQUE |
| 普通索引 | INDEX |
| 联合索引 | (a,b,c) |
| 全文索引 | FULLTEXT |
| 全文索引的作用:让 MySQL 像搜索引擎一样,快速查“包含某个词的内容”。 |
3️⃣ InnoDB 索引结构(B+Tree)
✅ B+Tree 特点
- 数据存在叶子节点
- 叶子节点链表相连
- 高度低(3~4 层)
4️⃣ 聚簇索引 vs 非聚簇索引
| 对比 | 聚簇索引 | 非聚簇索引 |
|---|---|---|
| 存储 | 数据 + 索引 | 索引 + 主键 |
| 数量 | 一个 | 多个 |
| 查询 | 快 | 回表 |
✅ InnoDB 主键 = 聚簇索引
5️⃣ 最左前缀原则(必问)
(a, b, c)
✅ 能用索引:
- a
- a,b
- a,b,c
❌ 不能用:
- b
- c
- b,c
6️⃣ 索引失效(高频)
❌ 使用函数
❌ 隐式转换
❌ like ‘%abc’
❌ or 条件不全
❌ != / <>
❌ is null / is not null(视版本)
三、事务(ACID)
| 特性 | 说明 |
|---|---|
| Atomicity | 原子性 |
| Consistency | 一致性 |
| Isolation | 隔离性 |
| Durability | 持久性 |
四、事务隔离级别(必背)
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| READ UNCOMMITTED | ✅ | ✅ | ✅ |
| READ COMMITTED | ❌ | ✅ | ✅ |
| REPEATABLE READ | ❌ | ❌ | ✅ |
| SERIALIZABLE | ❌ | ❌ | ❌ |
✅ MySQL 默认:REPEATABLE READ


五、MVCC(重点)
多版本并发控制
✅ 解决:
- 读写不阻塞
- 快照读
核心:
- undo log
- read view
- 隐藏字段(DB_TRX_ID)
六、锁机制(高频)
1️⃣ 锁类型
| 锁 | 说明 |
|---|---|
| 行锁 | InnoDB |
| 表锁 | MyISAM |
| 间隙锁 | 防止幻读 |
| 临键锁 | 行锁 + 间隙锁 |
2️⃣ 行锁升级条件
- 无索引
- 索引失效
- 范围更新
七、日志(面试加分)
| 日志 | 作用 |
|---|---|
| redo log | 崩溃恢复 |
| undo log | 回滚 / MVCC |
| binlog | 主从复制 |
✅ WAL:先写日志,再写磁盘
这张图片列出了 MySQL 中三种核心日志及其主要作用。这三者是理解 MySQL 事务、崩溃恢复和主从复制机制的关键,也是面试中的高频考点。
下面为你详细解析这三种日志的作用及面试加分点:
1. redo log (重做日志)
- 作用:崩溃恢复 (Crash Recovery)。
- 详细解释:
- MySQL 为了追求高性能,采用了 WAL (Write-Ahead Logging,预写日志) 机制,即数据先写入内存(Buffer Pool),再异步刷盘。
- 如果在数据还没刷盘时数据库突然崩溃了,重启后如何恢复未刷盘的数据?
redo log记录了数据的物理变化。即使数据页丢失,只要redo log还在,就能根据这些记录重新把数据“重做”出来,保证已提交的事务不丢失。- 特点:物理日志,循环写,保证事务持久性(Durability)。
2. undo log (回滚日志)
- 作用:回滚 / MVCC (多版本并发控制)。
- 详细解释:
- 回滚 (Rollback):当事务执行失败或执行
ROLLBACK命令时,需要将数据恢复到事务开始之前的状态。undo log记录了数据被修改前的旧值,利用它可以将数据“撤销”回去。 - MVCC (Multi-Version Concurrency Control):这是实现读不加锁、读写不冲突的关键。当一个事务需要读取数据时,如果该数据正在被其他事务修改,MySQL 会通过
undo log找到该数据之前的某个历史版本(快照),提供给当前事务读取,从而实现非阻塞读。 - 特点:逻辑日志,记录反向操作。
- 回滚 (Rollback):当事务执行失败或执行
3. binlog (二进制日志)
- 作用:主从复制 / 数据恢复。
- 详细解释

2059

被折叠的 条评论
为什么被折叠?



