详解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日

相关文章

  • SQL 提取最靠前的n行记录

    SQL 提取最靠前的n行记录通常使用Limit关键词来实现,Limit后跟的是两个整数参数:第一个参数指定了返回记录的起始位置,第二个参数指定了返回记录的数量。以下是具体实现步骤: 1.筛选条件 在提取最靠前的n行记录之前,先需要设置好筛选条件。使用WHERE子句来过滤记录,以达到要求的结果集。 2.排序 提取最靠前的n行记录需要按照关键列排序,一般使用OR…

    database 2023年3月27日
    00
  • ORACLE多条件统计查询的简单方法

    下面我来为您详细讲解“ORACLE多条件统计查询的简单方法”的完整攻略。 前言 对于多条件统计查询,通常我们会使用group by语句实现。然而,如果条件数量较多,group by语句就会变得臃肿且不易维护。本文将介绍一种简单的方法,通过使用CASE语句实现多条件统计查询。 方法 假设我们有一个订单表order,字段包括order_id, customer_…

    database 2023年5月21日
    00
  • MySQL优化全攻略-相关数据库命令

    MySQL是一款常用的关系型数据库,针对其性能优化将会带来很大的效益。本文将讲解MySQL的优化全攻略,并且包含相关数据库命令,让您可以更好的进行MySQL性能优化。 1. 使用索引 索引是一种特殊的数据结构,可以加速表数据的读取,查询的速度也会相应地提升。对于MySQL而言,合理使用索引能够极大地提高其查询性能。下面是一些常见的索引命令示例。 查看表的索引…

    database 2023年5月19日
    00
  • Python搭建代理IP池实现存储IP的方法

    下面我详细讲解一下Python搭建代理IP池实现存储IP的方法: 一、代理IP池简介 代理IP池是指一组可用的代理IP资源集合,最常见的使用场景是用于爬虫抓取网页数据。由于爬虫的频繁访问容易被目标网站识别并禁止,所以通过代理IP池来实现爬虫的匿名性是一种比较常见的方式。 二、搭建代理IP池 1. 获取代理IP 获取代理IP的方式主要有两种:免费代理和付费代理…

    database 2023年5月22日
    00
  • SQL Server 添加Delete操作回滚日志方式

    SQL Server 是一个强大的关系型数据库管理系统,支持事务处理,而事务处理的一个核心概念就是回滚,即在发生错误或异常时撤销某个操作的效果。在 SQL Server 中,我们可以通过添加 Delete 操作回滚日志的方式来实现这种回滚效果。 以下是添加 Delete 操作回滚日志的完整攻略: 1. 开启事务 在执行 Delete 操作之前,我们需要先开启…

    database 2023年5月21日
    00
  • laravel使用redis监听在内部再次使用redis遇到的问题

    问题一:启用监听收不到过期时间消息,原因是未开启配置解决办法是 在redis配置文件内开启 notify-keyspace-events Ex或者在redis命令行 redis-cli 使用命令: config set notify-keyspace-events Ex 问题二:PredisConnectionConnectionException : Er…

    Redis 2023年4月11日
    00
  • MySQL数据库是什么

    MySQL数据库是一种开源、关系数据库管理系统,是目前互联网上最流行、最常用的数据库之一。它是由瑞典MySQL AB公司开发,并由Oracle公司管理和支持。MySQL的发展历程非常长,自1995年诞生以来,已经经历了多次重大升级和改进,包括版本升级、功能增强等,使其成为一个高效、可靠、功能强大、使用方便的数据库管理系统。 MySQL数据库的特点主要有: 开…

    2023年3月8日
    00
  • 数据库系统和数据仓库的区别

    数据库系统(Database System)指的是包含了数据存储、管理和查询等功能的信息系统,由数据库和数据库管理系统(DBMS)组成,是存储、管理和维护数据的关键技术,用于解决数据管理中的问题。而数据仓库(Data Warehouse)则是一种特殊类型的数据库,用于支持企业级业务分析和决策。 下面分别从数据模型、数据源、查询方式和数据分析四个方面分析数据库…

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