5 万字 160道MySQL经典面试题总结(2024修订版)

💡 原文中文,约2800字,阅读约需7分钟。
📝

内容提要

MySQL是一种常用的关系型数据库管理系统,常见的面试题涉及索引、事务和锁等方面。索引是加快数据库查询和更新速度的特殊文件,常见的实现方式有B树和B+树。死锁是多个事务相互占用资源导致的循环等待现象,可以通过约定访问顺序和锁定资源来解决。视图是一种虚拟表,提高了复杂SQL语句的复用性和数据安全性。SQL语句主要分为DDL、DQL、DML和DCL四类。

🔎

延伸解读

索引的适用场景与代价

文章指出,索引能加速查询,但并非所有字段都适合创建。普通索引适用于数据多且字段值有重复的场景,唯一索引适用于字段值无重复的情况,复合索引则用于多个字段常被联合查询时。同时,增删改频繁而查询较少的表不宜建索引,因为索引维护会拖慢写操作;更新频繁或不出现在WHERE条件中的字段也不应建索引。

B树与B+树的结构差异

文章对比了B树和B+树:B树的内部节点和叶子节点都可存放键和值,而B+树的内部节点只存键,叶子节点才存放键和值。此外,B+树的叶子节点之间有一条链相连,B树的叶子节点则各自独立。这种结构差异影响了数据库索引的查询效率和范围扫描能力。

死锁的预防与解决思路

死锁是多个事务相互占用资源并请求对方资源导致的循环等待。文章给出了几种解决思路:不同程序并发存取多个表时,尽量约定以相同顺序访问表;在同一个事务中尽可能一次锁定所需全部资源;对于容易死锁的业务,可尝试升级锁定颗粒度,用表级锁降低死锁概率。

视图的作用与本质

视图本质上是虚拟表,物理上不存在,其行和列数据来自定义视图的查询所引用的基本表,并在引用时动态生成。使用视图可以提高复杂SQL语句的复用性,同时让开发者只关注特定数据和任务,只能看到视图定义的数据而非底层表数据,从而提升数据库安全性。

❓

Q&A

MySQL是什么?

MySQL是一个关系型数据库管理系统,属于Oracle旗下产品,广泛用于WEB应用和Java企业级开发。

MySQL与Oracle的主要区别是什么?

MySQL是开源免费的,支持多操作系统,而Oracle需要付费并占用更多资源,支持更高的并发量。

什么是索引,为什么要使用它?

索引是一种特殊的文件,帮助加快数据库查询和更新速度,常用的实现方式有B树和B+树。

死锁是什么,如何解决?

死锁是多个事务相互占用资源导致的循环等待现象,可以通过约定访问顺序和锁定资源来解决。

视图在MySQL中有什么作用?

视图是一种虚拟表,提高了复杂SQL语句的复用性和数据安全性,用户只能看到视图中定义的数据。

SQL语句主要分为哪几类?

SQL语句主要分为四类:DDL(数据定义语言)、DQL(数据查询语言)、DML(数据操纵语言)和DCL(数据控制语言)。

🏷️

标签

➡️

继续阅读