数据库面试那些绕不开的问题和你得准备的重点题目合集
- 问答
- 2025-12-29 23:03:03
- 3
的核心思想是,面试官问这些问题,不是想听你背书,而是想考察你的思考过程、你是否真的在实战中用过、以及你如何解决实际问题,所以准备时,一定要结合自己的理解和(如果有的话)项目经验。
SQL查询与基础
这是敲门砖,必须熟练到像呼吸一样自然。
- 核心查询语句(增删改查): 你得非常熟练地写出
SELECT(尤其是带DISTINCT,LIKE,IN的)、INSERT、UPDATE、DELETE语句,重点在于WHERE条件的灵活运用。 - 多表连接(JOIN): 这是必考点,你必须能说清楚并手写
INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN的区别,面试官最爱问:“LEFT JOIN和INNER JOIN有什么区别?什么时候该用哪个?” 准备一个实际的业务场景来解释,查询所有用户及其订单信息(包括没有订单的用户)”,这就必须用LEFT JOIN。 - 聚合函数与分组(GROUP BY + HAVING): 你得知道
COUNT,SUM,AVG,MAX,MIN怎么用,关键是要分清WHERE和HAVING的区别,简单记:WHERE在分组前过滤行,HAVING在分组后过滤组,常考题:“查询订单数量超过5个的客户id。” - 排序与去重(ORDER BY, DISTINCT): 结合其他语句使用,要知道
ORDER BY默认是升序(ASC),降序是DESC。 - 案例题: 面试官常会给一两张简单的表结构,让你现场写一个稍复杂的查询,有一张学生表、一张成绩表,让你“查询每门课程的平均分,并按平均分从高到低排序”,这考察的是综合运用
JOIN,GROUP BY,AVG,ORDER BY的能力。
数据库核心概念与原理
这部分是看你有没有深入理解,而不仅仅是会用人。
- 事务(Transaction)及其特性(ACID): 这个是重中之重,你必须用自己的话解释ACID:
- 原子性(Atomicity):事务里的操作要么全成功,要么全失败,没有中间状态,比如转账,不能我扣了钱,对方没收到。
- 一致性(Consistency):事务执行前后,数据库的完整性约束不能被破坏,比如转账前后,两个人的总金额应该不变。
- 隔离性(Isolation):多个事务同时执行时,互相之间感觉不到对方的存在,这会引出一个更复杂的问题——隔离级别。
- 持久性(Durability):事务一旦提交,它对数据的改变就是永久性的,即使系统故障也不会丢失。
- 隔离级别与并发问题(脏读、不可重复读、幻读): 这是难点,但必须掌握,你要能解释:
- 脏读:读到了另一个未提交事务的数据。
- 不可重复读:同一个事务内,两次读同一数据,结果不一样(因为被别的事务修改了)。
- 幻读:同一个事务内,两次查询同一条件,第二次查出了第一次没有的新行(因为被别的事务插入了)。 你要能说出MySQL的四种隔离级别(读未提交、读已提交、可重复读、串行化),并说明每个级别能解决哪些并发问题,常问:“MySQL默认的隔离级别是什么?(可重复读)为什么选这个?”
- 索引(Index): 索引是提高查询速度的关键。
- 为什么要用索引? 类比书的目录,加快查找速度。
- 索引的底层数据结构?(B+树) 虽然不要求你手写B+树,但你要知道B+树相比二叉树的优势:矮胖,层级少,适合磁盘IO;叶子节点有指针,适合范围查询。
- 什么情况下该建索引? 经常用于
WHERE条件、JOIN连接、ORDER BY排序的字段。 - 索引是不是越多越好? 绝对不是!索引会降低增删改的速度(因为要维护索引树),并且占用额外空间,这是一个展示你辩证思考的好机会。
- 聚簇索引和非聚簇索引的区别? 这是高级一点的问题,简单说,聚簇索引的叶子节点直接存数据行(如表的主键索引),而非聚簇索引的叶子节点存的是主键值,需要回表查询。
实战与优化
这部分考察你解决实际问题的能力。
- 慢查询如何排查和优化? 这是一个非常常见的场景题,你可以说:
- 第一步,开启慢查询日志,找到执行慢的SQL语句。
- 第二步,使用
EXPLAIN命令分析这条SQL的执行计划,这是关键!你要能看懂EXPLAIN结果里几个重要的字段:type(访问类型,ALL是全表扫描,要避免)、key(使用的索引)、rows(预估扫描行数)。 - 第三步,根据分析结果优化,为查询条件添加索引、优化SQL写法(避免使用
SELECT *,避免在WHERE子句中对字段进行函数操作)。
- 数据库设计范式? 你需要知道第一范式(1NF,属性不可分割)、第二范式(2NF,消除部分依赖)、第三范式(3NF,消除传递依赖)的基本概念,但更重要的是,你要能说出“反范式设计”——有时候为了查询性能,我们会故意冗余一些字段,牺牲一部分规范性,这再次体现了工程上的权衡。
不同数据库的特定问题
- MySQL的存储引擎(尤其是InnoDB和MyISAM的区别): 这是MySQL的特有问题,你必须掌握:
- InnoDB:支持事务、外键、行级锁,是MySQL默认且推荐使用的存储引擎,适用于绝大多数需要保证数据一致性的场景。
- MyISAM:不支持事务和外键,只支持表级锁,优点是读性能高,适合只读或者读多写少的场景,但现在基本被InnoDB取代。 面试官常问:“为什么现在MySQL默认用InnoDB而不是MyISAM?” 你就可以从对事务和并发支持更好的角度回答。
总结一下准备重点:
- SQL是基础:要能熟练手写。
- 事务和索引是核心:必须深刻理解,能用自己的话讲清楚。
- 优化思想是关键:展现出你不仅有知识,还有解决实际问题的思路(如用EXPLAIN分析慢查询)。
- 结合项目:如果可能,准备一两个你如何在项目中设计表、优化SQL的实际例子,这比空谈理论更有说服力。

本文由革姣丽于2025-12-29发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/70918.html
