MySQL面试题手册

梳理高频技术问题,帮助你按主题复习和查漏补缺。

服务端阅读 05月30日 19:50

MariaDB 和 MySQL 有什么区别?生产环境怎么选?

MariaDB 和 MySQL 同源,但现在已经不能简单当成同一个数据库的两个名字。MariaDB 最初由 MySQL 原始作者创建,目标是保持开源和兼容,同时加入更多存储引擎、优化器能力和集群方案;MySQL 由 Oracle 维护,生态稳定,云厂商支持广,MySQL 8.0 在窗口函数、CTE、JSON、权限模型等方面也补齐了很多能力。追问MariaDB 能直接替换 MySQL 吗?低版本和常规 SQL 场景通常迁移成本不高,客户端协议、基础语法和常用工具大多兼容。真正要小心的是高版本差异、系统表、复制、JSON 行为和认证插件。两者功能主要差在哪里?MariaDB 提供 Aria、ColumnStore、Spider、MyRocks 等更多引擎选择,也有自己的 Galera 集群路线。MySQL 8.0 的数据字典、JSON、窗口函数、CTE 和权限体系更统一。性能上 MariaDB 一定更快吗?不一定。读写性能受版本、引擎、索引、SQL、参数和硬件影响很大,同一条 SQL 在两个优化器里的执行计划可能不同。生产环境怎么选?如果团队重度使用 MySQL 8.0、依赖云厂商托管能力,继续用 MySQL 更稳。如果看重开源路线、特定引擎或 MariaDB 生态,MariaDB 合适。写段 SQLSELECT VERSION();SHOW VARIABLES LIKE 'version_comment';EXPLAIN SELECT * FROM orders WHERE user_id = 1001;
前端阅读 12月7日 00:10

MySQL中NULL值和零值有什么区别?

在MySQL中,NULL值代表字段中没有数据,即该字段是空的。它用于表示未知或不适用的值。而零值是一个实际的数据值,表示数值0。在逻辑上,NULL与任何其他值(包括零)都不相等,甚至NULL与NULL之间也不相等。这意味着在进行比较时,任何包含NULL的计算或比较的结果也是NULL。而零值在比较时表现为具体的数值0,可以直接用于计算和比较。
前端阅读 02月7日 00:10

MySQL中有哪些不同的数据类型?

在MySQL中,数据类型主要可以分为以下几类:数值类型:整型:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT浮点数和双精度:FLOAT, DOUBLE, DECIMAL日期和时间类型:DATE:仅日期TIME:仅时间DATETIME:日期和时间TIMESTAMP:时间戳YEAR:年份字符串类型:字符串:CHAR, VARCHAR文本:TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT二进制:BINARY, VARBINARY二进制文本:TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB枚举类型:ENUM集合类型:SET空间数据类型:GEOMETRY, POINT, LINESTRING, POLYGON, 等等。JSON数据类型:JSON每种数据类型都有其特定用途和存储需求,选择合适的数据类型可以优化数据库性能和存储效率。
前端阅读 02月6日 23:51

如何启动和停止MySQL服务器?

在不同的操作系统上启动和停止MySQL服务器的方法会有所不同。以下是一些常见系统的基本指令:在Linux系统上启动MySQL服务:sudo systemctl start mysqld停止MySQL服务:sudo systemctl stop mysqld在Windows系统上首先,打开命令提示符或PowerShell。启动MySQL服务:net start MySQL停止MySQL服务:net stop MySQL在macOS系统上启动MySQL服务:sudo /usr/local/mysql/support-files/mysql.server start停止MySQL服务:sudo /usr/local/mysql/support-files/mysql.server stop这些命令假设MySQL已正确安装在默认路径,并且服务名称没有被修改。如果你的安装和服务名称有所不同,你可能需要调整这些命令以适应你的具体情况。
前端阅读 12月6日 13:01

MySQL 如何给表进行重命名?

在MySQL中,可以使用 RENAME TABLE 语句来重命名表。具体的语法如下:RENAME TABLE old_table_name TO new_table_name;这里的 old_table_name 是原来的表名,new_table_name 是你想要更改成的新表名。使用这条命令后,原来的表名会被新表名替换。例如,如果你想将一个名为 customers 的表重命名为 clients,你可以使用以下命令:RENAME TABLE customers TO clients;在执行这条命令之前,请确保没有其他数据库操作正在使用该表,以避免操作冲突或数据一致性问题。
前端阅读 02月5日 23:29

SQL 中左连接和右连接有什么区别?

左连接(Left Join)和右连接(Right Join)都是SQL中的连接类型,用于合并两个表。区别在于:左连接(Left Join):结果集包括左表(Left Join左边的表)的所有记录。如果左表的记录在右表中没有匹配的记录,则结果集中这些记录对应的右表字段会包含NULL值。右连接(Right Join):结果集包括右表(Right Join右边的表)的所有记录。如果右表的记录在左表中没有匹配的记录,则结果集中这些记录对应的左表字段会包含NULL值。简而言之,左连接会保留左表中的所有记录,即使它们在右表中没有匹配项;右连接则保留右表中的所有记录,即使它们在左表中没有匹配项。
前端阅读 972024年7月23日 22:18

SQL 中完全外部连接和交叉连接之间有什么区别?

完全外部连接(Full Outer Join)和交叉连接(Cross Join)在数据库管理系统中是两种不同的连接类型,主要区别如下:结果集的不同:完全外部连接:返回左表和右表中的所有记录。如果左表中的记录在右表中没有匹配项,则相应的右表中的字段会用NULL填充,反之亦然。这意味着完全外部连接会包含左连接和右连接的结果。交叉连接:返回左表和右表的笛卡尔积。如果左表有N行,右表有M行,那么结果集将有N*M行。交叉连接不考虑表间的任何关联条件,简单地将左表的每一行与右表的每一行组合。应用场景:完全外部连接:常用于需要查看两个表中全部数据,并找出在对方表中没有匹配的记录的场景。交叉连接:适用于需要生成基于两个表所有可能组合的场景,比如生成可能的产品组合或测试数据等。性能影响:完全外部连接:由于需要匹配左表和右表中的所有记录,可能会消耗较多的计算资源,尤其是表很大时。交叉连接:由于生成的是两个表的笛卡尔积,可能会产生庞大的结果集,这在大多数业务场景中可能不是必要的,也会显著增加查询处理时间和资源消耗。总结来说,完全外部连接用于合并两个表并找出无匹配项的记录,而交叉连接用于生成两个表所有可能的行组合。在实际应用中,选择适合具体需求的连接类型是很重要的。
前端阅读 842024年7月23日 22:17

什么是数据库事务?

数据库事务是一个被视为单一的工作单元的操作序列。这些操作要么全部完成,要么全部不完成,以确保数据库的数据完整性和一致性。事务具有以下四个基本特性,通常用ACID模型来描述:原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败,不留下中间状态。一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。隔离性(Isolation):多个事务并发执行时,每个事务的执行不应该被其他事务干扰。持久性(Durability):事务一旦提交,其结果就是永久性的,即使系统发生故障也不会丢失。 事务处理是数据库管理系统中保证数据安全性和完整性的重要机制。