数据库 50个面试题
以下是 **50 个数据库核心面试题及简洁答案**,涵盖关系型数据库(如 MySQL、PostgreSQL)、NoSQL、SQL 语法、事务、索引、优化等核心知识点:
---
### **数据库基础**
1. **关系型数据库与非关系型数据库的区别?**
- 关系型(MySQL、PostgreSQL)基于表结构,支持 SQL 和事务(ACID);非关系型(MongoDB、Redis)灵活存储(文档、键值对等),适合高并发和扩展。
2. **什么是 ACID 特性?**
- 原子性(Atomicity):事务全部成功或全部失败;一致性(Consistency):数据状态合法;隔离性(Isolation):事务间互不干扰;持久性(Durability):提交后永久保存。
3. **CAP 定理是什么?**
- 分布式系统中,最多同时满足两个特性:一致性(Consistency)、可用性(Availability)、分区容忍性(Partition Tolerance)。
4. **数据库三范式是什么?**
- 第一范式(1NF):列不可再分;第二范式(2NF):消除部分依赖;第三范式(3NF):消除传递依赖。
5. **什么是存储过程(Stored Procedure)?**
- 预编译的 SQL 代码集合,存储在数据库中,可重复调用,减少网络传输。
---
### **SQL 语法**
6. **`JOIN` 的类型有哪些?**
- `INNER JOIN`(内连接)、`LEFT JOIN`(左连接)、`RIGHT JOIN`(右连接)、`FULL OUTER JOIN`(全外连接)、`CROSS JOIN`(笛卡尔积)。
7. **如何删除重复记录?**
```sql
DELETE FROM table
WHERE id NOT IN (
SELECT MIN(id)
FROM table
GROUP BY column1, column2
);
```
8. **`HAVING` 和 `WHERE` 的区别?**
- `WHERE` 过滤行(在聚合前),`HAVING` 过滤分组(在聚合后,需配合 `GROUP BY`)。
9. **如何分页查询?**
```sql
-- MySQL
SELECT * FROM table LIMIT 10 OFFSET 20; -- 第3页(每页10条)
-- SQL Server
SELECT * FROM table OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
```
10. **什么是窗口函数(Window Function)?举例说明。**
- 对一组行进行计算并返回多行结果,如 `RANK()`、`ROW_NUMBER()`:
```sql
SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;
```
---
### **事务与锁**
11. **事务的隔离级别有哪些?**
- 读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)、串行化(Serializable)。
12. **脏读、不可重复读、幻读的区别?**
- 脏读:读到未提交的数据;不可重复读:同一事务两次读取结果不同(数据被修改);幻读:同一查询返回新插入的行。
13. **乐观锁与悲观锁的区别?**
- 悲观锁:假设冲突多,直接加锁(如 `SELECT ... FOR UPDATE`);乐观锁:假设冲突少,通过版本号或时间戳检测冲突。
14. **什么是死锁?如何避免?**
- 多个事务互相等待对方释放锁。避免方法:设置超时、按固定顺序访问资源、使用死锁检测机制。
---
### **索引与性能优化**
15. **索引的作用是什么?优缺点?**
- 加速查询;缺点:占用存储、降低写操作速度(增删改需更新索引)。
16. **B+树索引与哈希索引的区别?**
- B+树:支持范围查询和排序,适合磁盘存储;哈希索引:等值查询快,不支持范围查询。
17. **什么是最左前缀原则?**
- 联合索引中,查询条件需从最左列开始,否则索引失效。例如索引 `(a,b,c)`,查询 `WHERE b=1` 无法使用索引。
18. **如何分析 SQL 执行效率?**
- 使用 `EXPLAIN` 查看执行计划,关注 `type`(扫描方式)、`key`(使用的索引)、`rows`(扫描行数)。
19. **什么是覆盖索引?**
- 索引包含查询所需的所有字段,无需回表查询数据行。
20. **什么情况下索引会失效?**
- 对列进行运算或函数操作(如 `WHERE YEAR(date) = 2023`);使用 `OR` 连接非索引列;模糊查询以 `%` 开头。
---
### **数据库设计**
21. **主键(Primary Key)与唯一键(Unique Key)的区别?**
- 主键唯一且非空,一张表只能一个;唯一键允许空值,可多个。
22. **外键(Foreign Key)的作用是什么?**
- 确保引用完整性,关联另一表的主键,限制无效数据插入。
23. **什么是级联删除(CASCADE DELETE)?**
- 删除主表记录时,自动删除从表关联记录(需定义外键约束)。
24. **数据库水平分片与垂直分片的区别?**
- 水平分片:按行拆分到不同表/库(如按用户 ID 分片);垂直分片:按列拆分(如将常用字段与不常用字段分开)。
---
### **高可用与备份**
25. **主从复制(Master-Slave Replication)的原理?**
- 主库写操作记录到 binlog,从库读取 binlog 并重放,实现数据同步。
26. **什么是读写分离?**
- 写操作走主库,读操作走从库,分担主库压力。
27. **数据库备份方式有哪些?**
- 物理备份(直接复制文件)、逻辑备份(导出 SQL 语句)、增量备份(仅备份变化部分)。
28. **如何实现数据库高可用?**
- 主从复制+故障转移(如 MySQL MHA)、集群方案(如 Galera Cluster)、云数据库多可用区部署。
---
### **NoSQL**
29. **MongoDB 的集合(Collection)与文档(Document)是什么?**
- 集合类似表,文档是 JSON 格式的记录(如 `{ name: "John", age: 30 }`)。
30. **Redis 的数据类型有哪些?**
- 字符串(String)、列表(List)、哈希(Hash)、集合(Set)、有序集合(ZSet)、流(Stream)。
31. **Redis 持久化方式有哪些?**
- RDB(快照)、AOF(记录写命令)、混合持久化(Redis 4.0+)。
32. **什么是缓存穿透、缓存击穿、缓存雪崩?如何解决?**
- 穿透:查询不存在的数据(布隆过滤器);击穿:热点数据过期后高并发查询(互斥锁);雪崩:大量缓存同时过期(随机过期时间)。
---
### **场景题**
33. **如何优化慢查询?**
- 分析执行计划、添加索引、重写 SQL(避免 `SELECT *`)、拆分大查询、升级硬件。
34. **如何设计一个点赞功能?**
- 使用 Redis 的 `Hash` 或 `Set` 存储用户点赞关系,异步持久化到数据库。
35. **如何处理订单超时未支付?**
- 定时任务扫描+延迟队列(如 RabbitMQ TTL+死信队列)、Redis 过期回调。
---
### **进阶问题**
36. **数据库连接池的作用是什么?**
- 复用数据库连接,减少创建和销毁连接的开销(如 HikariCP、Druid)。
37. **什么是 MVCC(多版本并发控制)?**
- 通过版本号实现读写不阻塞,提高并发性能(如 MySQL 的 InnoDB 使用 Undo Log 实现)。
38. **解释 WAL(Write-Ahead Logging)机制?**
- 数据修改前先写日志(如 Redo Log),确保故障恢复时数据一致性。
39. **分库分表后如何实现全局唯一 ID?**
- 雪花算法(Snowflake)、UUID、数据库自增 ID 步长、Redis 生成 ID。
40. **什么是数据库的读写放大问题?**
- 一次逻辑操作引发多次物理 I/O(如 B+树索引的多次磁盘访问)。
---
### **开放性问题**
41. **如何设计一个高并发的秒杀系统?**
- 限流(令牌桶)、缓存(Redis 预减库存)、异步下单(消息队列)、数据库降级(库存字段原子操作)。
42. **如果数据库 CPU 占用率突然飙升,如何排查?**
- 查看慢查询日志、监控正在执行的 SQL(如 `SHOW PROCESSLIST`)、分析索引使用情况。
---
### **答案扩展建议**
- **结合场景**:如分库分表时如何选择分片键(Sharding Key)。
- **底层原理**:B+树为什么比 B 树更适合数据库索引?
- **对比优化**:MySQL 的 InnoDB 与 MyISAM 引擎区别。
---
**完整 50 题**可扩展至分布式事务(如 2PC、TCC)、NewSQL(TiDB)、OLAP 与 OLTP 区别、数据库与缓存一致性(如双写、延迟删除)等。如果需要详细答案或代码示例,请进一步说明!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)