Skip to content

数据库面试总览:高频 8 题(初/中级必备) ​

这不是一份“从零讲数据库”的教程,而是专门帮我应对面试用的提纲:
把常问的数据库面试题集中列出来,细节放在后面的专题文章里慢慢啃。


一、数据库高频面试题总表 ​

下面这 8 道题,是初/中级开发几乎绕不开的数据库面试题,可以当作我的必背清单:

  1. MySQL 索引用的是什么数据结构?为什么不用红黑树?

    • 关键点:B+ 树、多叉树、磁盘 IO 次数少、范围查询友好
    • 延伸:聚集索引 vs 非聚集索引(InnoDB vs MyISAM)
    • 👉 详细见:MySQL 索引与 B+ 树原理
  2. 哪些情况会导致索引失效?

  3. 哪些情况会导致索引失效?

    • 关键点:LIKE '%xxx'、对索引列做函数/运算、类型不一致导致隐式转换、在 OR 中混入非索引列
    • 延伸:覆盖索引、最左前缀原则、联合索引设计
    • 👉 详细见:SQL 优化与索引使用姿势
  4. 怎么分析慢查询?你平时会怎么排查?

    • 关键点:EXPLAIN 看执行计划,关注 type / key / rows / extra
    • 延伸:慢查询日志、加索引前先看“是不是业务写法有问题”
    • 👉 详细见:慢查询场景与排查思路
  5. MySQL 事务的 ACID 是什么?具体怎么实现的?

    • 关键点:原子性(undo log)、持久性(redo log)、隔离性(锁 + MVCC)、一致性(约束 + 业务逻辑)
    • 延伸:redo / undo 的区别、崩溃恢复大致流程
    • 👉 详细见:MySQL 事务与锁的核心原理
  6. MySQL 有哪几种隔离级别?会带来哪些并发现象?

    • 关键点:
      • READ UNCOMMITTED:可能脏读
      • READ COMMITTED:解决脏读,可能不可重复读
      • REPEATABLE READ(InnoDB 默认):解决不可重复读,靠 MVCC 处理大部分幻读
      • SERIALIZABLE:串行化,完全隔离,性能最差
    • 延伸:快照读 vs 当前读、间隙锁 / Next-Key Lock
    • 👉 详细见:MySQL 事务与锁的核心原理
  7. 什么是 SQL 注入?怎么防护?

    • 关键点:字符串拼接 SQL 被恶意拼入条件或语句
    • 防护:参数化查询、预编译、使用 MyBatis/JPA 等 ORM、对外暴露接口不要直接透传拼接条件
    • 👉 可结合项目中登录/查询接口,自行准备 1~2 个简单案例
  8. 为什么要用数据库连接池?HikariCP 有什么优势?

    • 关键点:数据库连接建立成本高,通过连接池复用连接、限制并发连接数,防止数据库被打挂
    • HikariCP 优势:轻量、性能好、配置简单,Spring Boot 默认推荐
    • 👉 详细见:数据库连接池与 HikariCP
  9. 主键和唯一索引有什么区别?

    • 关键点:
      • 主键:不允许为 NULL,一张表只能有一个主键(可以是联合主键)
      • 唯一索引:允许有一个 NULL,可以有多个唯一索引
    • 延伸:自增主键 vs 业务主键(UUID、订单号等)的优缺点
    • 👉 可以结合自己项目,想清楚“为什么这样设计主键”

建议在复习数据库模块前,先把这 8 道题自己写一份“标准回答 + 延伸追问”,形成自己的话术。

说明:我这里不强调“纸上手写 SQL”。更多是面试中常见的形式:给你一个需求,你能不能快速写出/口述出正确 SQL,并解释为什么这么写、可能用到哪些索引。


二、如何使用这个数据库面试模块 ​

  • 第一步:从这 8 题开始
    先保证:每一道题你都能用自己的话讲 2~3 分钟,而不是背概念。

  • 第二步:对照专题文章补齐细节
    遇到没讲顺的地方,就去看对应的文章:

  • 第三步:准备 1~2 个与数据库相关的项目案例
    比如:

    • “我们系统里有一个订单表,最开始没建合适的索引,导致某个查询特别慢,后来我是怎么定位和优化的……”
    • “因为并发写多了之后出现了死锁,我是怎么查到死锁信息,并通过调整 SQL 顺序/拆分事务解决的……”

面试的时候,只要围绕这 8 道题 + 自己的项目经历展开,大部分初/中级数据库相关的问答都能比较从容地应对。


🔁 小结:

  • 这篇是总览 +题单,适合临上战场前快速过一遍。
  • 细节、原理、图示和更多延伸问题,放在后面的数据库专题文章里慢慢消化即可。