资深面试之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 标准的字符串类型,例如 TEXTBLOB,这些类型是为了满足特定的需求,如存储二进制数据或大文本。


19. 什么是通用 SQL 函数?

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


20. MySQL 支持事务吗?

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


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

相关推荐
绝无仅有3 小时前
面试MySQL 高级问题及解答(三)
后端·面试·github
z晨晨3 小时前
Java求职面试实战:从Spring到微服务的全面挑战
java·数据库·spring·微服务·面试·技术栈
聪明的笨猪猪4 小时前
Java SE “异常处理 + IO + 序列化”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
JaceJufrog4 小时前
VidGo Bug修复1-修复线程错误
后端
GalenZhang8884 小时前
Springboot调用Ollama本地大模式
java·spring boot·后端
好久没学习了要努力呀4 小时前
让理解窗口函数变得简单
后端
小蒜学长4 小时前
springboot海洋馆预约系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
IT_陈寒5 小时前
SpringBoot实战:这5个隐藏技巧让我开发效率提升200%,90%的人都不知道!
前端·人工智能·后端
catchadmin5 小时前
如何在 PHP 升级不踩坑?学会通过阅读 RFC 提前预知版本变化
开发语言·后端·php