详解MySQL的sql_mode查询与设置

yizhihongxing

当我们执行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日

相关文章

  • tomcat管道模式 pipeline与valve详解

    Tomcat管道模式 Pipeline与Valve详解 Tomcat使用管道模式(Pipeline)处理HTTP请求。该模式将请求交给多个Valve进行处理,并由每个Valve按照特定顺序执行处理逻辑。本文将介绍Tomcat的管道模式以及如何配置Valve。 管道模式(Pipeline) Tomcat中的管道模式是指HTTP请求的处理方式。HTTP请求的处理…

    database 2023年5月22日
    00
  • 如何使用Python实现数据库中数据的去重?

    以下是使用Python实现数据库中数据去重的完整攻略。 数据库中数据去重简介 在数据库中,数据去重是指删除重复的数据行。在Python中,可以使用pymysql库实现数据库中去重。 步骤1:连接到数据库 在Python中,可以使用pymysql库连接到MySQL数据库。以下是连接到MySQL数据库的基语法: import pymysql db = pymys…

    python 2023年5月12日
    00
  • Docker部署Mysql,.Net6,Sqlserver等容器

    下面是Docker部署Mysql,.Net6,Sqlserver等容器的完整攻略: 安装Docker 在Ubuntu和Debian上安装Docker有两种方法:使用Docker官方存储库安装或使用默认存储库安装。本文采用后者,使用默认存储库安装Docker。 运行以下命令安装相关依赖: sudo apt-get update sudo apt-get ins…

    database 2023年5月22日
    00
  • redis安装、配置、使用和redis php扩展安装教程

    下面就来详细讲解一下“redis安装、配置、使用和redis php扩展安装教程”的完整攻略。 redis安装 下载redis 官网下载地址:https://redis.io/download,我们选择稳定版的最新版本。下载完成后,解压到我们希望的路径下。 安装redis 进入到redis目录,执行make命令进行编译,再执行make install命令将编…

    database 2023年5月18日
    00
  • mysql字符集和校对规则(Mysql校对集)

    MySQL字符集和校对规则是指在MySQL中使用哪种字符编码来存储数据以及如何基于这些编码进行比较排序。它对于数据的存储和检索至关重要,因为字符集和校对规则的错误设置可能会导致数据损坏和查询错误。 字符集 MySQL中支持多种字符集,包括ASCII、Latin1、UTF-8、GBK等。其中,UTF-8是目前最流行的字符集,具有广泛的应用和良好的跨平台性。 在…

    database 2023年5月22日
    00
  • Java中消息队列任务的平滑关闭详解

    我将为您详细讲解Java中消息队列任务的平滑关闭的完整攻略。 什么是消息队列 消息队列是一种高效的异步通信机制,它能够将消息发送到队列中,然后由多个消费者对这些消息进行处理。消息队列通常用于应用程序之间的通信,例如,在电商网站中,订单服务将订单信息发送到消息队列,而物流服务则从消息队列中获取这些消息进行处理。 Java中的消息队列 在Java中,最流行的消息…

    database 2023年5月22日
    00
  • ORA-12514及ORA-28547错误解决方案

    ORA-12514及ORA-28547错误解决方案 错误概述 ORA-12514和ORA-28547都是Oracle数据库连接的错误信息。 ORA-12514错误表示:监听程序无法识别当前连接描述符所引用的服务名称,可能是服务名称拼写错误,或该服务未在监听程序的服务名称列表中注册,也可能该服务当前并没有运行。 ORA-28547错误表示:使用OLE DB或O…

    database 2023年5月18日
    00
  • 在Docker中使用MySQL的教程

    下面是Docker中使用MySQL的详细教程攻略。 1. 准备工作 在开始前,请确保您已经在本地计算机上安装了Docker。如果您尚未安装,请前往Docker官网下载并安装Docker。 2. 启动MySQL容器 在Docker中使用MySQL的第一步是启动MySQL容器。启动MySQL容器之前需要准备一个数据目录,用于存储MySQL的数据。 $ mkdir…

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