MySQL 面试题及详细解答(二)

​编辑

21. Federated 表是什么?

回答
Federated 表是一种特殊的 MySQL 表类型,它允许你从一个 MySQL 服务器访问另一个 MySQL 服务器上的表。这种表不会在本地存储数据,而是通过网络访问远程数据库来进行数据操作。这对于分布式数据库系统或跨服务器查询非常有用。

22. 如果一个表有一列定义为 TIMESTAMP,将发生什么?​编辑

回答

如果表中的列定义为 TIMESTAMP,则该列会自动存储当前的时间戳(当前时间)。当插入新记录时,TIMESTAMP 列会自动填充当前时间。如果有更新操作,TIMESTAMP 列会在每次更新时自动更新为当前时间,除非使用 DEFAULTON UPDATE 进行特定配置。

23. 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况?​编辑

回答

如果 AUTO_INCREMENT 列达到了最大值(例如,对于 INT 类型,最大值为 2147483647),MySQL 会停止自动增量并发生错误。为了防止这种情况,可以使用更大的整数类型(如 BIGINT),或者手动调整 AUTO_INCREMENT 值。

24. 怎样才能找出最后一次插入时分配了哪个自动增量?

回答

可以通过 0 函数获取最后一次插入的 AUTO_INCREMENT 值。例如:

sql 复制代码
SELECT 0;  

该函数返回当前连接中最后一次插入的自增值。

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

回答

可以使用 SHOW INDEX FROM 命令查看一个表上定义的所有索引。例如:

sql 复制代码
SHOW INDEX FROM table_name;  

此命令将返回表上所有索引的详细信息。

26. LIKE 声明中的 %_ 是什么意思?​编辑

回答

  • % :匹配零个或多个字符。例如,'a%' 可以匹配 a, abc, a123 等。
  • _ :匹配单个字符。例如,'a_' 可以匹配 ab, a1, a2 等。

27. 如何在 Unix 和 MySQL 时间戳之间进行转换?

回答

在 Unix 时间戳和 MySQL 的 DATETIMETIMESTAMP 类型之间进行转换,可以使用 FROM_UNIXTIME()UNIX_TIMESTAMP() 函数:

  • 将 Unix 时间戳转换为 MySQL 时间:
sql 复制代码
SELECT FROM_UNIXTIME(1632968400);  
  • 将 MySQL 时间转换为 Unix 时间戳:
sql 复制代码
SELECT UNIX_TIMESTAMP('2025-09-24 12:00:00');  

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

回答

列对比运算符用于比较列的值,常见的对比运算符有:

  • =(等于)
  • !=<>(不等于)
  • >(大于)
  • <(小于)
  • >=(大于或等于)
  • <=(小于或等于)

29. 我们如何得到受查询影响的行数?

回答

可以使用 ROW_COUNT() 函数来获取受最近执行的查询影响的行数。对于 INSERTUPDATEDELETE 等查询都可以使用该函数。例如:

sql 复制代码
SELECT ROW_COUNT();  

30. MySQL 查询是否区分大小写?

回答

MySQL 默认在 Linux 系统上对表名区分大小写,因为文件系统是区分大小写的。而在 Windows 系统上,表名默认不区分大小写。列名和别名默认不区分大小写,除非通过更改字符集或使用 BINARY 进行显式比较。

31. LIKE 和 REGEXP 操作有什么区别?

回答

  • LIKE :用于进行简单的模式匹配,支持 %_ 通配符。
  • REGEXP:用于进行更复杂的正则表达式匹配,支持更丰富的匹配模式,功能更强大。

例如:

sql 复制代码
SELECT * FROM users WHERE name LIKE 'A%';   -- 匹配以 A 开头的所有名字  
SELECT * FROM users WHERE name REGEXP '^A';  -- 匹配以 A 开头的所有名字,支持更多复杂模式  

32. BLOB 和 TEXT 有什么区别?

回答

  • BLOB(Binary Large Object)用于存储二进制数据(如图像、视频等)。
  • TEXT 用于存储大量文本数据(如文章、评论等)。

BLOB 数据类型不能进行字符集转换,而 TEXT 数据类型会根据字符集进行转换。

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

回答

  • mysql_fetch_array():返回一个包含查询结果的关联数组、索引数组或两者的数组。
  • mysql_fetch_object():返回一个包含查询结果的对象,每一列作为对象的属性。

例如:

php 复制代码
$row = mysql_fetch_array($result);  // $row['column_name']  
$row = mysql_fetch_object($result); // $row->column_name  

34. 我们如何在 MySQL 中运行批处理模式?

回答

批处理模式通常用于执行多个 SQL 查询。可以使用 mysql 命令行客户端中的 -e 选项来执行批处理命令。例如:

bash 复制代码
mysql -u username -p -e "USE db_name; SELECT * FROM table_name;"  

还可以将多条 SQL 语句写入脚本文件并使用 source 命令执行:

bash 复制代码
mysql -u username -p < script.sql  

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

回答

MyISAM 表格存储在数据库目录下,每个表通常会有三个文件:

  • .frm:存储表结构。
  • .MYD:存储数据。
  • .MYI:存储索引。

这些文件存储在数据库的文件系统中。

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

回答

MySQL 支持多种类型的表格(存储引擎),常见的包括:

  • InnoDB:支持事务、外键和行级锁。
  • MyISAM:不支持事务,适用于读操作较多的场景。
  • MEMORY:数据存储在内存中,适用于临时数据存储。
  • CSV:将表存储为 CSV 文件。
  • FEDERATED:用于连接远程数据库的表。
  • ARCHIVE:适用于存储大量数据的归档表。

相关推荐
野犬寒鸦2 小时前
从零起步学习Redis || 第二章:Redis中数据类型的深层剖析讲解(下)
java·redis·后端·算法·哈希算法
haokan_Jia3 小时前
【springboot的分页功能TableDataInfo,有时候需要复杂的分页实现,怎么办呢?】
java·spring boot·后端
Terio_my3 小时前
Java 后端面试技术文档(参考)
java·开发语言·面试
今晚务必早点睡3 小时前
前端缓存好还是后端缓存好?缓存方案实例直接用
前端·后端·缓存
IT_陈寒3 小时前
Vue3性能优化:5个被低估的Composition API技巧让我打包体积减少了40% 🚀
前端·人工智能·后端
MicrosoftReactor4 小时前
技术速递|如何使用 Playwright MCP 和 GitHub Copilot 调试 Web 应用
github·copilot·测试·playwright·mcp
brzhang4 小时前
ChatGPT Pulse来了:AI 每天替你做研究,这事儿你该高兴还是该小心?
前端·后端·架构
xie_pin_an4 小时前
SpringBoot 统一功能处理:拦截器、统一返回与异常处理
java·spring boot·后端
泉城老铁4 小时前
springboot+vue 文件下载,实现大文件的分片压缩和下载,避免内存溢出
前端·spring boot·后端