详解MySQL的sql_mode查询与设置

当我们执行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技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Oracle数据加载和卸载的实现方法

    Oracle数据加载和卸载的实现方法 1. 数据加载方法 Oracle提供了很多种数据加载的方法,包括使用命令行工具、使用Oracle Data Pump等,以下将详细介绍其中常用的两种方法。 1.1 SQL Loader SQL Loader是Oracle提供的一个命令行工具,可用于将数据加载到Oracle数据库中。它能够高效地处理大量数据,并提供了多种数…

    database 2023年5月21日
    00
  • 列出SQL Server中具有默认值的所有字段的语句

    要列出 SQL Server 数据库中具有默认值的所有字段,可以使用以下两种方法。 方法一:查询系统表 sys.columns 可以通过查询系统表 sys.columns,以获取具有默认值的列信息。 SELECT OBJECT_SCHEMA_NAME(c.object_id) AS [Schema], OBJECT_NAME(c.object_id) AS …

    database 2023年5月21日
    00
  • java实现AES 32位加密解密的方案

    针对“java实现AES 32位加密解密的方案”的完整攻略,我将分为以下几个部分进行讲解: 什么是AES加密 Java如何实现AES加密 示例1:AES加密32位字符串 示例2:AES解密32位字符串 什么是AES加密 AES (Advanced Encryption Standard)是一种高级加密标准,是目前最常见的加密算法之一。AES加密有多个密钥长度…

    database 2023年5月21日
    00
  • mysql-5.7.28 在Linux下的安装教程图解

    MySQL-5.7.28 在Linux下的安装教程图解 一、下载和安装 下载MySQL-5.7.28 (示例下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz) $ wget https://cdn.mysql.com//Down…

    database 2023年5月22日
    00
  • 安装配置MySQLMTOP来监控MySQL运行性能的教程

    下面是安装配置MySQLMTOP来监控MySQL运行性能的教程完整攻略。 简介 MySQLMTOP是一款用于监控MySQL性能和执行状态的开源工具。它能够实时监控MySQL的运行状态,包括查询、锁和事务状态等,方便用户优化MySQL数据库性能。 安装步骤 以下是安装配置MySQLMTOP的步骤: 1. 下载MySQLMTOP 通过MySQLMTOP官网或者G…

    database 2023年5月22日
    00
  • 由于系统错误 126 (SQL Server),指定驱动程序无法加载

    问题描述 当尝试连接 SQL Server 数据库时,可能会遇到以下错误提示: 由于系统错误 126 (SQL Server),指定驱动程序无法加载。 这意味着在加载 SQL Server 驱动程序时出现了问题,原因可能是以下几种: 驱动程序文件缺失或被删除 驱动程序文件路径设置错误 驱动程序版本不兼容当前操作系统 解决方案 以下是针对不同情况的解决方案: …

    database 2023年5月21日
    00
  • Redis 实现队列原理的实例详解

    Redis 实现队列原理的实例详解 什么是 Redis 队列? Redis 队列是一种基于 Redis 数据库的数据结构,它可以满足任务异步执行的需求。将需要执行的任务放入队列中,然后通过另一个进程或者线程来消费队列中的任务。Redis 队列可以实现任务任务的异步、高效、可靠执行。 Redis 队列实现原理 Redis 队列的实现原理是基于 Redis 的 …

    database 2023年5月22日
    00
  • SpringBoot整合Mybatis Plus实现基本CRUD的示例代码

    下面是整合SpringBoot和Mybatis Plus实现基本CRUD的详细攻略。 环境准备 在开始之前,请确保你已经安装了以下环境: JDK 1.8 或以上版本 Maven IDE(如IntelliJ IDEA、Eclipse等) 创建SpringBoot项目 首先,我们需要创建一个SpringBoot项目。可以使用IDE自带的Spring Initia…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部