编辑
21. Federated 表是什么?
回答 :
Federated
表是一种特殊的 MySQL 表类型,它允许你从一个 MySQL 服务器访问另一个 MySQL 服务器上的表。这种表不会在本地存储数据,而是通过网络访问远程数据库来进行数据操作。这对于分布式数据库系统或跨服务器查询非常有用。
22. 如果一个表有一列定义为 TIMESTAMP,将发生什么?
编辑
回答 :
如果表中的列定义为 TIMESTAMP
,则该列会自动存储当前的时间戳(当前时间)。当插入新记录时,TIMESTAMP
列会自动填充当前时间。如果有更新操作,TIMESTAMP
列会在每次更新时自动更新为当前时间,除非使用 DEFAULT
或 ON 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 的 DATETIME
或 TIMESTAMP
类型之间进行转换,可以使用 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()
函数来获取受最近执行的查询影响的行数。对于 INSERT
、UPDATE
、DELETE
等查询都可以使用该函数。例如:
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:适用于存储大量数据的归档表。