MySQL 基础面试题及详细解答
编辑
1. 一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15、16、17 条记录,再把 MySQL 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15?
编辑
回答 :
自增主键的值并不会因删除记录而回退。即使删除了 ID 为 15、16、17 的记录,在 MySQL 重启之后,新插入的记录的 ID 会是 18,而不是 15,因为自增值是按插入的顺序递增的。
2. MySQL 的技术特点是什么?
回答:
- 高性能:MySQL 支持多种存储引擎(如 InnoDB、MyISAM),并且通过查询缓存、索引等技术优化查询性能。
- 易用性:MySQL 提供了简单易用的接口,支持广泛的编程语言。
- 开源:MySQL 是开源的,可以根据需要进行定制化修改。
- 支持事务:支持 ACID(原子性、一致性、隔离性、持久性)事务特性,保证数据的一致性和可靠性。
- 支持高可用性:提供主从复制、故障恢复等高可用特性。
- 跨平台支持 :支持在不同操作系统(Windows、Linux、macOS)上的部署。
编辑
3. Heap 表是什么?
回答 :
Heap 表(也叫内存表)是 MySQL 中的一种存储引擎。它的数据存储在内存中,因此查询速度非常快。Heap 表适用于临时存储和高性能的查询场景,但它的数据在服务器重启后会丢失。
4. MySQL 服务器默认端口是什么?
回答 :
MySQL 默认的端口号是 3306。
5. 与 Oracle 相比,MySQL 有什么优势?
回答:
- 开源免费:MySQL 是完全开源的,适合中小型企业或开发人员免费使用,而 Oracle 是收费的。
- 轻量级:MySQL 通常比 Oracle 更轻量,适合大多数 Web 应用。
- 易于使用:MySQL 的安装和配置相对较简单,社区文档和支持也非常丰富。
- 速度更快:对于简单的查询,MySQL 的性能通常优于 Oracle。
6. 如何区分 FLOAT 和 DOUBLE?
回答:
- FLOAT:用于存储精度较低的浮动小数,通常占用 4 个字节,范围较小。
- DOUBLE:用于存储精度更高的浮动小数,通常占用 8 个字节,具有更大的范围和更高的精度。
7. 区分 CHAR_LENGTH 和 LENGTH
回答:
- CHAR_LENGTH:返回字符串的字符数(考虑字符集,如 UTF-8)。
- LENGTH:返回字符串的字节数(考虑字符的字节表示,如 UTF-8 中一个字符可能占多个字节)。
8. 在 MySQL 中 ENUM 的用法是什么?
回答 :
ENUM
是一种字符串类型,可以定义一组预设的值,列只能包含这些预设值中的一个。例如:
sql
CREATE TABLE users (
id INT,
gender ENUM('Male', 'Female', 'Other')
);
ENUM
可以提高数据的完整性和查询效率。
9. 如何定义 REGEXP?
回答 :
在 MySQL 中,REGEXP
是用来进行正则表达式匹配的操作符。例如:
sql
SELECT * FROM users WHERE name REGEXP '^A';
这会查找所有名字以字母 A 开头的用户。
10. CHAR 和 VARCHAR 的区别?
回答:
- CHAR:固定长度的字符串类型,不论实际存储多少字符,都会占用定义的长度空间。如果存储的字符少于定义的长度,会用空格填充。
- VARCHAR:可变长度的字符串类型,只会占用实际存储的字符长度,不会浪费空间。
11. 列的字符串类型可以是什么?
回答 :
MySQL 中常见的字符串类型包括:
CHAR
VARCHAR
TEXT
(TINYTEXT
、MEDIUMTEXT
、LONGTEXT
)BLOB
(TINYBLOB
、MEDIUMBLOB
、LONGBLOB
)ENUM
SET
12. 如何获取当前的 MySQL 版本?
回答 :
可以通过以下命令获取当前 MySQL 的版本:
sql
SELECT VERSION();
13. MySQL 中使用什么存储引擎?
回答 :
MySQL 支持多种存储引擎,最常见的是:
- InnoDB:支持事务、外键和行级锁。
- MyISAM:不支持事务,适用于只读或较低并发的应用。
- MEMORY:存储在内存中,数据丢失。
- CSV:将数据存储为 CSV 文件。
14. MySQL 驱动程序是什么?
回答 :
MySQL 驱动程序是应用程序和 MySQL 服务器之间的接口,常见的驱动程序有:
- MySQL Connector/J(Java 驱动)
- MySQL Connector/ODBC(ODBC 驱动)
- MySQL Connector/Python(Python 驱动)
15. TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 数据类型上做什么?
回答 :
在 MySQL 中,TIMESTAMP
数据类型可以自动记录行的最后修改时间。使用 CURRENT_TIMESTAMP
可以在每次更新时自动更新字段的时间戳。
16. 主键和候选键有什么区别?
回答:
- 主键(Primary Key):唯一标识一行数据的列或组合,主键列不能有空值。
- 候选键(Candidate Key):可以唯一标识一行数据的列,候选键可以有多个,其中一个被选为主键。
17. 如何使用 Unix shell 登录 MySQL?
回答 :
可以通过以下命令使用 Unix shell 登录 MySQL:
bash
mysql -u username -p
然后输入密码即可。
18. myisamchk 是用来做什么的?
回答 :
myisamchk
是用于修复、优化、检查 MyISAM 表的命令行工具。可以用于修复损坏的 MyISAM 表,或对表进行优化操作。
19. 如何控制 HEAP 表的最大尺寸?
回答 :
在创建 HEAP 表时,可以使用 MAX_ROWS
选项来限制表的最大尺寸,例如:
sql
CREATE TABLE heap_table (
id INT,
name VARCHAR(100)
) ENGINE=HEAP MAX_ROWS=10000;
20. MyISAM Static 和 MyISAM Dynamic 有什么区别?
回答:
- MyISAM Static :静态 MyISAM 表,所有列的长度固定,不支持
NULL
值。 - MyISAM Dynamic :动态 MyISAM 表,列的长度可以变化,支持
NULL
值。
这些问题涵盖了 MySQL 的基础知识,了解并掌握它们有助于面试的准备以及在实际开发中的应用。