站点导航
首页 网址导航 文章资讯 资源下载 问答社区 排行榜
数据库 2026 最新 MySQL 面试题 20 例(从基础到高级)
全文约 4333 字 · 阅读约 11 分钟
数据库

2026 最新 MySQL 面试题 20 例(从基础到高级)

神器小编 · 2026-09-28 20:24 80 阅读

整理20道2026年MySQL面试真题,覆盖基础语法、索引、事务锁、SQL优化、MVCC、主从复制,附带SQL实例,后端面试复习必备。

MySQL 后端开发面试是技术面试高频板块,不管是初级开发、全栈工程师还是运维岗位,都会考察 MySQL 基础语法、索引原理、事务锁、SQL 优化等内容。本文神器阁整理20道真实面试高频题,覆盖基础、进阶、高级知识点,搭配简单实例,方便面试复习。

MySQL 后端开发面试是技术面试高频板块,不管是初级开发、全栈工程师还是运维岗位,都会考察 MySQL 基础语法、索引

一、基础篇(1~7题)

1. MySQL 有哪些常用存储引擎?InnoDB 和 MyISAM 的核心区别?

核心答案:常用存储引擎:InnoDB、MyISAM、Memory。MySQL5.5之后默认引擎是InnoDB。

  • InnoDB:支持事务、行级锁、外键、崩溃安全恢复;聚集索引,数据和索引放在一起;支持MVCC。

  • MyISAM:不支持事务,表级锁;查询速度快;不支持崩溃安全恢复,容易丢数据;非聚集索引。

实例:

-- 查看当前表存储引擎
show create table user;
-- 创建表指定引擎
create table test_myisam(id int) engine=myisam;

2. 什么是事务?事务四大特性 ACID 分别是什么?

事务是一组SQL语句,要么全部执行成功,要么全部失败回滚。

  • A(Atomicity)原子性:事务不可拆分。

  • C(Consistency)一致性:事务执行前后数据状态合法。

  • I(Isolation)隔离性:多个事务之间互不干扰。

  • D(Durability)持久性:事务提交后,数据永久保存。

实例:转账操作,A扣钱、B加钱,任意一步失败,全部回滚。

start transaction;
update account set money=money-100 where id=1;
update account set money=money+100 where id=2;
commit; -- 提交;rollback 回滚

3. MySQL 事务隔离级别有哪4种?默认级别是什么?

4个隔离级别(从低到高)

  1. 读未提交(Read Uncommitted):能读到其他事务未提交数据,脏读。

  2. 读已提交(Read Committed,RC):只能读到已提交数据,存在不可重复读。

  3. 可重复读(Repeatable Read,RR):MySQL InnoDB 默认隔离级别,解决不可重复读,存在幻读。

  4. 串行化(Serializable):最高级别,加表锁,完全隔离,性能最差。

脏读:读到别的事务未提交数据;不可重复读:同一事务多次读取同一数据结果不一样;幻读:同一事务范围查询,其他事务插入新数据。

4. char 和 varchar 的区别?

  • char:固定长度字符串。长度不足会空格填充,查询更快,浪费空间。适合长度固定数据,如手机号、身份证号。

  • varchar:可变长度字符串。占用空间随实际内容变化,节省存储;读取略慢。适合长短不一文本,用户名、备注。

实例:char(10) 存abc,占用10字节;varchar(10)存abc,占用3字节+长度标识。

5. 什么是主键、唯一索引?两者区别?

  • 主键(primary key):唯一标识一行,不能为NULL,一张表只能一个主键。主键属于聚集索引。

  • 唯一索引(unique):字段值不能重复,允许NULL(可以多个null),一张表可以多个唯一索引。

alter table user add unique uk_phone(phone);

6. MySQL 常用数据类型有哪些?int(11)代表什么?

常用:int、bigint、varchar、char、datetime、timestamp、decimal。

int(11) 不是限制存储11位数字,只是显示宽度,不限制存储范围。int固定4字节。金额要用decimal,不要用float/double,存在精度丢失。

7. 什么是联合主键?联合索引最左前缀原则?

联合索引由多个字段组成,例如 idx_a_b(a,b)。
最左前缀原则:查询要匹配索引最左边字段,才能命中索引。
索引 idx_a_b(a,b):where a=1 可以走索引;where b=2 无法走索引。

二、进阶篇(8~14题)

8. 索引是什么?索引优缺点?

索引是数据库用于快速查找数据的数据结构,InnoDB索引底层是B+树。
✅优点:大幅提升查询速度;减少排序、分组IO。
❌缺点:占用磁盘空间;增删改SQL会维护索引,降低写入性能。

索引不是越多越好,频繁更新的字段不要建索引。

9. B树和B+树区别,为什么InnoDB选用B+树?

  • B树:每个节点存数据+索引,叶子节点不相连。

  • B+树:非叶子节点只存索引,全部数据放在叶子节点;叶子节点用链表串联。

InnoDB选择B+树原因:

  1. 非叶子节点更小,一页能存放更多索引,IO次数更少。

  2. 叶子链表,范围查询(大于、小于)遍历方便。

  3. 查询稳定:任何查询都要走到叶子节点。

10. 什么是覆盖索引?

覆盖索引:查询字段全部包含在索引里,不需要回表读取原始数据。
表user,索引idx_name_phone(name,phone)

-- 覆盖索引,直接从索引拿name、phone,不回表
select name,phone from user where name='张三';

优化思路:尽量使用覆盖索引,减少回表。

11. explain 关键字作用?explain 重点看哪些字段?

explain用来分析SQL执行计划,判断索引是否生效。
重点字段:

  • type:访问类型,性能从优到劣:system > const > eq_ref > ref > range > index > ALL。ALL代表全表扫描,需要优化。

  • key:实际使用索引。

  • rows:预估扫描行数,越小越好。

  • Extra:额外信息,Using filesort文件排序、Using temporary临时表,都是需要优化。

explain select * from user where id=1;

12. MySQL 行锁、表锁、意向锁分别什么时候触发?

  • 表锁:MyISAM;lock tables手动加锁;DDL语句。锁住整张表,并发差。

  • 行锁:InnoDB,只有通过索引检索数据才会触发行锁;不走索引,行锁升级表锁。

  • 意向锁:InnoDB表级锁,分为意向共享IS、意向排他IX。意向锁不会阻塞行锁,用来快速判断表内是否存在行锁冲突。

13. SQL 慢查询怎么定位?慢查询日志作用?

慢查询日志记录执行时间超过阈值的SQL。
开启慢查询:

show variables like 'slow_query_log';
show variables like 'long_query_time'; -- 阈值,默认10秒

定位流程:开启慢日志 → 抓取慢SQL → explain分析执行计划 → 优化索引/改写SQL。

14. 什么是MVCC?实现原理?

MVCC(多版本并发控制),InnoDB实现可重复读隔离级别核心机制。
原理:每行数据保存版本链,事务读取时,读取快照版本,不加锁,提升读写并发。核心由undo log(回滚日志)+ read view实现。

  • undo log:保存数据旧版本。

  • read view:事务开启时生成,用来判断版本可见性。

三、高级篇(15~20题)

15. 什么是死锁?怎么避免死锁?

死锁:两个事务互相持有对方需要的锁,互相等待,无法释放。
示例:事务A锁行1,等待行2;事务B锁行2,等待行1。
避免方案:

  1. 更新多个行,统一顺序更新。

  2. 事务尽量简短,减少锁持有时间。

  3. 避免大事务中混合读写。

  4. InnoDB自带死锁检测,发现死锁自动回滚代价小的事务。

16. 大表分页 limit offset 很大时,为什么慢?如何优化?

limit 100000,10:数据库扫描前100010行,丢弃前面10万行,返回10条,偏移量越大越慢。
优化方案:主键书签分页(推荐)

-- 不使用offset,记录上一页最大id
select * from user where id > 100000 limit 10;

17. 什么是 binlog、redo log、undo log,三者作用?

  • redo log(重做日志):物理日志,保证事务持久性。崩溃恢复,刷盘前宕机,重启重做事务。InnoDB引擎日志。

  • undo log(回滚日志):保存数据旧版本,事务回滚;MVCC版本链。InnoDB引擎日志。

  • binlog(二进制日志):逻辑日志,记录SQL变更语句;主从复制、数据恢复。MySQL服务层日志。

两阶段提交:redo log prepare → 写binlog → redo log commit。保证binlog和redo log数据一致。

18. MySQL 主从复制原理?延迟产生原因?

主库写操作记录到binlog;从库IO线程拉取主库binlog写入relay log;从库SQL线程回放日志,同步数据。
延迟原因:

  1. 主库写入压力大,binlog生成速度大于从库回放。

  2. 从库机器性能差,SQL单线程回放(5.7默认单线程)。

  3. 大事务:主库执行很久,一次性推送大量日志。

19. 哪些情况索引会失效?

  1. where条件索引字段做函数运算、隐式类型转换。
    where name='123' name是varchar;where phone=13800138000 phone字符串,数字匹配触发隐式转换。

  2. 联合索引不满足最左前缀。

  3. 使用!=、<>、not in。

  4. like 以%开头 like '%张三'。

    like '张三%' 前缀匹配,索引可以生效。

20. 数据库分库分表场景、水平拆分和垂直拆分区别?

垂直拆分:按字段拆分。一张大表拆多张表,分到不同库,例如用户基础信息表、用户扩展信息表。减少单表字段数量。
水平拆分:按数据行拆分。结构不变,把行分散到多个表,例如user_0、user_1,按id取模分片。适合单表数据量千万级以上。
分库分表问题:分布式事务、跨表join、分页排序复杂。

文章标签: # MYSQL # 面试题
本文为作者原创,首发于神器阁社区。未经授权禁止转载;商业转载请联系作者获得授权,非商业转载请注明出处与原文链接。
神器小编 的头像
神器小编

资源创作者,欢迎关注。

24 资源 0 粉丝
相关推荐
全部评论 0
最热 最新
0/500
还没有评论,来说两句吧