当我们执行MySQL查询时,默认会启用一组 SQL 模式(sql_mode)来定义数据库行为和约束。有时候需要在查询时更改 SQL 模式或查询当前正在使用的 SQL 模式。本文将详细讲解 MySQL 的 sql_mode 查询与设置,为大家提供一份完整攻略。
一、查询当前 SQL 模式
要查询当前正在使用的 SQL 模式,我们可以使用如下命令:
SELECT @@GLOBAL.sql_mode;
这将返回一个字符串,其中包含当前的 SQL 模式。
同时,我们也可以查询当前会话的 SQL 模式,使用如下命令:
SELECT @@SESSION.sql_mode;
二、设置 SQL 模式
要设置全局的 SQL 模式,我们可以使用如下命令:
SET GLOBAL sql_mode="[MODE]";
需要注意的是,这个命令将设置全局的 SQL 模式,会影响到整个数据库系统。如果需要仅设置当前会话的 SQL 模式,则可使用如下命令:
SET SESSION sql_mode="[MODE]";
而 MODE 参数可以设置为如下值中的多个或所有值:
ANSI_QUOTES
:启用 ANSI_QUOTES,将双引号解释为引用标识符。IGNORE_SPACE
:启用 IGNORE_SPACE,忽略关键字和函数名之间的空格。NO_AUTO_VALUE_ON_ZERO
:禁用 NO_AUTO_VALUE_ON_ZERO,如果字段上有 AUTO_INCREMENT,则将插入零值而不是 NULL 值。NO_BACKSLASH_ESCAPES
:禁用 NO_BACKSLASH_ESCAPES,禁止反斜杠用作转义字符。NO_ENGINE_SUBSTITUTION
:禁用 NO_ENGINE_SUBSTITUTION,如果存储引擎不可用,将生成错误而不是要被替换的 MyISAM 引擎。NO_UNSIGNED_SUBTRACTION
:禁用 NO_UNSIGNED_SUBTRACTION,将生成错误而不是减去无符号整数。NULL_DATES
:启用 NULL_DATES,将 NULL 值插入具有日期类型的列而不是零值。PIPES_AS_CONCAT
:启用 PIPES_AS_CONCAT,将管道符“|”视为字符串连接运算符。STRICT_ALL_TABLES
:启用 STRICT_ALL_TABLES,当插入或更新时抛出错误并警告。STRICT_TRANS_TABLES
:启用 STRICT_TRANS_TABLES,将抛出警告而不是错误。TRADITIONAL
:启用 TRADITIONAL,启用严格模式并禁用非标准语法。
例如,如果我们需要启用 PIPES_AS_CONCAT 和 ANSI_QUOTES 模式,可以执行如下命令:
SET SESSION sql_mode="PIPES_AS_CONCAT, ANSI_QUOTES";
三、示例
以下示例演示了如何查询和设置全局和会话 SQL 模式。
查询当前 SQL 模式
SELECT @@GLOBAL.sql_mode;
-- 返回结果可能类似这样:"ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
设置全局 SQL 模式
SET GLOBAL sql_mode="NO_ENGINE_SUBSTITUTION";
-- 执行成功时将不返回任何结果
设置会话 SQL 模式
SET SESSION sql_mode="PIPES_AS_CONCAT, STRICT_ALL_TABLES";
-- 执行成功时将不返回任何结果
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解MySQL的sql_mode查询与设置 - Python技术站