资深面试之MySQL 问题及解答(一)

​

在面试中,关于 MySQL 的高级问题通常涉及底层架构、数据一致性、存储引擎以及性能优化等方面。以下是一些常见的资深 MySQL 面试问题及解答,供您参考。 ​编辑


1. MySQL 中有哪几种锁?

MySQL 中主要有两种锁:

  • 共享锁(S锁,Shared Lock):允许事务读取数据,但不允许其他事务修改该数据。
  • 排他锁(X锁,Exclusive Lock):允许事务修改数据,且在锁定期间,其他事务不能读取或修改该数据。

除此之外,还有以下几种锁的细分:

  • 行级锁:在 InnoDB 存储引擎中,锁定的是表中的某一行数据,允许多个事务并发操作不同的行。
  • 表级锁:锁定整个表,通常使用在 MyISAM 存储引擎中,不能并发操作。
  • 意向锁 :主要用于行级锁,防止不同事务之间产生冲突。编辑

2. MySQL 中有哪些不同的表格?

MySQL 中有两种主要的存储引擎,每种引擎使用不同的表格类型:

  • MyISAM:默认存储引擎,支持表级锁,不支持事务和外键。
  • InnoDB:支持行级锁,支持事务、外键、ACID 特性。
  • MEMORY:数据存储在内存中,查询速度快,但重启时数据会丢失。
  • CSV:表数据存储为 CSV 文件,适合导入/导出。
  • ARCHIVE :适合存储大量归档数据,支持压缩。编辑

3. 简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别

特性 MyISAM InnoDB
锁机制 表级锁 行级锁
事务支持 不支持事务 支持事务
外键支持 不支持外键约束 支持外键约束
崩溃恢复 不支持崩溃恢复 支持崩溃恢复
存储格式 基于文件的存储格式,.MYD 和 .MYI 基于表空间存储,支持多表空间
性能 适合只读查询或少量写操作的应用 适合复杂事务和高并发写操作的应用

4. MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别? ​编辑

InnoDB 支持以下四种事务隔离级别:

  1. READ UNCOMMITTED:允许读取未提交的事务的数据,可能会出现脏读。
  2. READ COMMITTED:只允许读取已提交事务的数据,避免脏读,但可能会有不可重复读。
  3. REPEATABLE READ:保证一个事务中的数据读操作是可重复的,避免脏读和不可重复读,但可能会出现幻读。
  4. SERIALIZABLE:完全隔离,强制事务按顺序执行,避免脏读、不可重复读和幻读,但性能最低。

5. CHAR 和 VARCHAR 的区别?

  • CHAR :固定长度的字符串,存储时会根据定义长度填充空格。例如,CHAR(10) 总是存储 10 个字符。
  • VARCHAR:可变长度的字符串,仅存储实际内容长度,占用空间更少。

6. 主键和候选键有什么区别?

  • 主键(Primary Key):唯一标识一条记录,并且不允许有空值(NULL)。
  • 候选键(Candidate Key):是能唯一标识记录的字段,可以有多个候选键,但只有一个主键。

7. myisamchk 是用来做什么的?

myisamchk 是一个用于检查和修复 MyISAM 表的工具。当 MyISAM 表遭到损坏时,可以使用该命令来修复表格。

bash 复制代码
myisamchk -r table_name  

8. 如果一个表有一列定义为 TIMESTAMP,将发生什么?

  • TIMESTAMP 类型的列自动存储当前时间戳。
  • 默认情况下,TIMESTAMP 列会在每次插入或更新时自动更新时间戳。

9. 你怎么看到为表格定义的所有索引?

可以使用 SHOW INDEX 命令查看表格定义的所有索引:

sql 复制代码
SHOW INDEX FROM table_name;  

10. LIKE 声明中的 % 是什么意思?

在 LIKE 声明中,% 表示零个或多个字符。用 % 来匹配任意长度的字符。例如:

sql 复制代码
SELECT * FROM table WHERE name LIKE 'A%';  

这将匹配所有以 "A" 开头的名字。


11. 列对比运算符是什么?

列对比运算符用于比较两个列的值。常用的列对比运算符包括:

  • =:等于
  • != 或 <>:不等于
  • <、>:小于或大于
  • <=、>=:小于等于或大于等于
  • BETWEEN:范围查找
  • IN:匹配多个值

12. BLOB 和 TEXT 有什么区别?

  • BLOB:用于存储二进制数据,如图片、音频等。
  • TEXT:用于存储文本数据,长度可以非常大,适合存储长文本。

13. MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么?

  • mysql_fetch_array:返回一行数据,可以通过数字索引或字段名访问结果。
  • mysql_fetch_object:返回一行数据,可以通过字段名访问结果,但不支持数字索引。

14. MyISAM 表格将在哪里存储,并且还提供其存储格式?

  • MyISAM 表的存储位置通常在 MySQL 数据目录下。
  • MyISAM 使用 .MYD 文件存储数据,.MYI 文件存储索引。

15. 如何显示前 50 行?

可以使用 LIMIT 子句来限制返回的行数:

sql 复制代码
SELECT * FROM table_name LIMIT 50;  

16. 可以使用多少列创建索引?

在 InnoDB 存储引擎中,索引最多可以包含 16 列。


17. NOW() 和 CURRENT_DATE() 有什么区别?

  • NOW() 返回当前的日期和时间。
  • CURRENT_DATE() 仅返回当前的日期。

18. 什么是非标准字符串类型?

非标准字符串类型通常指的是不符合 SQL 标准的字符串类型,例如 TEXT 或 BLOB,这些类型是为了满足特定的需求,如存储二进制数据或大文本。


19. 什么是通用 SQL 函数?

通用 SQL 函数指的是可以在不同的数据库管理系统中通用的 SQL 函数,如 COUNT(), AVG(), MAX(), MIN() 等聚合函数。


20. MySQL 支持事务吗?

是的,MySQL 支持事务,特别是在使用 InnoDB 存储引擎时。事务支持 ACID 特性(原子性、一致性、隔离性和持久性)。


这些问题覆盖了 MySQL 的多方面知识,帮助您更深入理解 MySQL 及其高级特性。

相关推荐
小码哥_常2 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
学长毕设5 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
Yuzhiyuxia7 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
努力的小雨7 小时前
给 AI 眼镜开发应用有多难?我从零做了一个陪练,还上架了
后端
u1301308 小时前
GitHub 热榜项目:日榜(2026-10-29)
人工智能·github
excel8 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
AI入职记9 小时前
AI 代码审查召回率实测:20 个骗过单元测试的变异体,抓到 13 个
后端
浮链序9 小时前
别让 AI 客服把用户当猴耍:百来行 Python 把「转人工」做成一条高可用链路
后端
穆梓兰煊9 小时前
Python 千万级向量检索内存优化手册
github
属于自己的天空9 小时前
Claude Code 插件完全指南:官方市场怎么用,怎么自己写(v2.1.269+)
后端