数据库常见面试题

返回 面试

关系型数据库高频 Q&A;原理见 数据库基础MySQL


事务与 ACID

问题简答深入
什么是事务?一组 SQL 的逻辑单元,全成功或全回滚数据库事务
ACID 含义?原子性 undo;一致性约束;隔离性 MVCC+锁;持久性 redo同上
四种隔离级别?RU / RC / RR / Serializable;MySQL 默认 RR数据库事务与隔离级别
脏读 / 不可重复读 / 幻读?未提交 / 同事务两次读不同 / 两次查询行数不同同上
MVCC 是什么?多版本 + ReadView 快照读,减少加锁同上
RR 和 RC 区别?RC 每次 SELECT 新快照;RR 事务首次读固定快照同上
@Transactional 和 DB 事务关系?Spring 在方法级管理 Connection 提交/回滚SpringBoot事务失效场景

Q:一致性谁保证?
A:一致性是目标;原子性、隔离性、持久性 + 业务约束(唯一索引、CHECK)共同保证。


死锁与锁

问题简答深入
数据库死锁是什么?两事务互相等对方持有的行锁/间隙锁数据库死锁
InnoDB 怎么处理?死锁检测,回滚代价小的事务,返回 1213同上
如何预防?固定加锁顺序、缩短事务、小批量、避免事务内 RPC同上
行锁 / 间隙锁 / Next-Key Lock?锁行;锁索引间隙防幻读;行锁+间隙(RR 默认)事务与锁
FOR UPDATE vs LOCK IN SHARE MODEX 排他锁 vs S 共享锁同上
DB 死锁 vs 线程死锁?DB:锁数据行;OS:锁线程/资源死锁

索引与 SQL

详见 MySQL索引与SQL优化

问题简答深入
为什么用 B+ 树?矮树少 IO、叶链表支持范围扫描MySQL索引与SQL优化
聚簇 vs 非聚簇?InnoDB 主键即聚簇;二级索引叶存主键再回表同上
最左前缀?联合索引从左列开始匹配;跳列难用索引同上
索引失效场景?函数/隐式转换、左模糊 %xx、OR、不符合最左同上
覆盖索引?查询列全在索引中,无需回表同上
EXPLAIN 看什么?type、key、rows、Extra(Using index/filesort)同上

Q:主键为什么推荐自增?
A:顺序插入减少页分裂;随机 UUID 导致频繁分裂,写性能差。


架构与复制

问题简答深入
主从复制原理?binlog → relay log → 从库重放主从复制
读写分离问题?主从延迟导致读不到刚写数据同上
分库分表?垂直拆库、水平拆表;跨库 JOIN 消失分库分表
垂直 vs 水平?按业务/列拆 vs 按数据量/哈希拆同上

分布式事务

问题简答深入
为什么需要?跨库/跨服务无法靠单机 ACID数据库事务
2PC / XA?协调者 prepare → commit;强一致、阻塞、性能差同上
TCC?Try 预留 → Confirm / Cancel;业务侵入同上
SAGA?本地事务 + 补偿;最终一致同上
本地消息表?业务写库与消息同事务,异步投递同上
Seata AT 模式?拦截 SQL、undo log 自动回滚Seata

Q:微服务常用哪种?
A:能异步则 SAGA / 本地消息表;强一致资金场景 TCC;尽量避免跨库 XA。


Redis(常一起问)

详见 Redis常见面试题

问题简答深入
Redis 单线程为何快?内存 + IO 多路复用 + 简单数据结构Redis常见面试题
缓存穿透 / 击穿 / 雪崩?空值/布隆;热点 key 互斥;TTL 打散同上
Redis 分布式锁?SET key val NX EX;Redisson 看门狗同上
Redis 事务?MULTI/EXEC,非 ACID 隔离,无回滚同上

答题建议

  1. 事务题:先 ACID → 隔离级别 → 三种读异常 → MVCC/锁怎么防。
  2. 死锁题:画 T1 锁 A 等 B、T2 锁 B 等 A;再说 InnoDB 检测 + 应用重试。
  3. 索引题:B+ 树 → 聚簇/回表 → 最左前缀 → EXPLAIN。
  4. 分布式题:说清强一致 vs 最终一致取舍,别只会背 2PC。

专题笔记

相关