MySQL 常见面试题完全指南
本文档整理了常见的 MySQL 面试题,按从浅到深的顺序讲解,特别适合新手准备面试或系统复习。每个问题都给出:
- 问题
- 思路
- 标准/推荐回答
- 必要时配合简单示例
你可以:
- 先只看“问题+简答”,自己在脑子里回答一遍;
- 然后对照“解析”补充自己的理解;
- 对不熟的地方回到对应专题文档(如 基本操作、索引、事务 等)复习。
目录
- 基础概念与常规操作
- 数据类型与表设计
- SQL 与 CRUD
- 索引相关面试题
- 事务与隔离级别
- 锁机制
- 日志(binlog、redo log、undo log)
- 性能优化与慢查询
- 设计题与综合题
- 杂项与开放题
1. 基础概念与常规操作
1.1 什么是 MySQL?和“数据库”“数据库管理系统”有什么区别?
考点:基础概念、术语区分。
示例回答:
- 数据库(Database):有结构地存放数据的仓库,可以有很多张表。
- 数据库管理系统(DBMS):管理数据库的“软件”,负责存储、查询、备份、安全等。
- MySQL:一个开源的 关系型数据库管理系统(RDBMS),用 SQL 操作数据,数据以表的形式组织。
可以加一句:MySQL 常用于 Web 应用后端,配合 PHP、Java、Python 等语言,是非常常见的数据库选型。
1.2 什么是表?什么是行和列?
考点:能否把“表结构”说清楚。
示例回答:
- 表(Table):数据库中存放数据的基本结构,可以理解为一张带表头的表格。
- 列(Column/字段):表中某一“属性”,如学生表里的姓名、年龄、班级。
- 行(Row/记录):表中的一条具体数据记录,例如“张三,18,高一1班”就是一行。
补充一句:表的结构由列名和数据类型决定,数据则是一行一行的记录。
1.3 MySQL 中常见的约束有哪些?分别有什么作用?
考点:约束类型、作用场景。
关键点:
- PRIMARY KEY:主键,唯一标识一行,不能重复、不能为 NULL。
- UNIQUE:唯一约束,列值不能重复(可为 NULL)。
- NOT NULL:非空,列值必须有,不允许 NULL。
- DEFAULT:默认值,插入时未指定该列就用默认值。
- CHECK(8.0.16+):检查约束,列值必须满足条件,如年龄 0~150。
- FOREIGN KEY:外键,保证该列的取值必须在另一张表的主键或唯一键中存在。
可以举例学生-班级、订单-用户来说明外键约束的作用。
1.4 如何查看当前有哪些数据库?如何选择要使用的数据库?
考点:基本命令是否熟练。
关键命令:
- 查看所有数据库:
SHOW DATABASES;
- 选择(切换)数据库:
USE 库名;
- 查看当前正在使用的数据库:
SELECT DATABASE();
1.5 MySQL 中如何查看某个表的结构?如何查看当前库下所有表?
命令:
- 查看所有表:
SHOW TABLES;
- 查看表结构:
DESC 表名;
-- 或
DESCRIBE 表名;
2. 数据类型与表设计
2.1 MySQL 中常见的数据类型有哪些?如何选择?
考点:能否说出主流类型并举例。
简要回答:
- 数值:
- INT / BIGINT:整数,如 id、数量。
- DECIMAL(M,D):精确小数,如金额、分数。
- FLOAT / DOUBLE:近似小数,如比例、统计值。
- 字符串:
- VARCHAR(n):可变长字符串,适合大部分文本,如姓名、标题。
- CHAR(n):定长字符串,如固定长度编码。
- TEXT / LONGTEXT:长文本,如文章内容。
- 日期时间:
- DATE:日期。
- TIME:时间。
- DATETIME / TIMESTAMP:日期 + 时间。