详解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语句创建数据库详解

    下面是利用SQL语句创建数据库的完整攻略: 创建数据库 要创建一个数据库,需要使用SQL语句中的CREATE DATABASE命令,示例如下: CREATE DATABASE database_name; 其中,database_name是要创建的数据库的名称,注意名称中不要包含特殊字符和空格。 例如,要创建一个名为mydb的数据库,可以使用以下命令: CR…

    database 2023年5月21日
    00
  • 增删改查sql语法基础教程

    增删改查SQL语法基础教程 SQL是一种关系型数据库管理系统的标准语言,用于对数据库进行操作。其中最常用的操作包括增加、删除、修改和查找数据,也就是所谓的CRUD。 本文将为大家详细讲解SQL中CRUD操作的语法基础,包括以下内容: 增加数据 (INSERT) 删除数据 (DELETE) 修改数据 (UPDATE) 查询数据 (SELECT) 在本文中,我们…

    database 2023年5月22日
    00
  • C#使用DataSet Datatable更新数据库的三种实现方法

    以下是“C#使用DataSet DataTable更新数据库的三种实现方法”的完整攻略: 1. 准备工作 在实现三种更新方法之前,我们需要先做一些准备工作,包括: 引用相关命名空间 连接数据库 创建一个DataSet及其中的DataTable 具体地,我们可以使用以下代码: // 引用命名空间 using System.Data.SqlClient; usi…

    database 2023年5月21日
    00
  • MYSQL大量写入问题优化详解

    MYSQL大量写入问题优化详解 在MYSQL中进行大量写入操作时,可能会遇到性能瓶颈和效率不高的问题。本文将针对大量写入问题进行优化详解。 问题分析 在MYSQL中,进行大量写入操作时,可能会出现以下问题: 数据库性能瓶颈。对数据库进行大量写入操作时,可能会导致数据库性能瓶颈,导致整个系统的性能下降。 数据丢失。对数据库进行大量写入操作时,可能出现数据丢失的…

    database 2023年5月19日
    00
  • Redis分布式锁的python实现

    #!/usr/bin/env python # coding=utf-8 import time import redis class RedisLock(object): def __init__(self, key): self.rdcon = redis.Redis(host=”, port=6379, password=””, db=1) self…

    Redis 2023年4月11日
    00
  • 基于swoole+Redis的消息实时推送通知

    swoole+Redis将实时数据的推送 一 实现功能 设计师订单如果设计师未抢单,超时(5分钟)设计订单时时给设计师派送,设计师公众号中收到派单信息设计发布者收到派单成功信息 环境 centos6.10 redis-4.0.2 swoole-src-4.4.12 php-7.1.5 MYsyql5.7 在centos6默认是gcc-4.7,安装swoole…

    Redis 2023年4月11日
    00
  • MySQL下海量数据的迁移步骤分享

    MySQL是一款常用的关系型数据库,随着数据量的增大,一些使用MySQL的项目可能需要进行数据库的迁移。下面分享一下MySQL下海量数据的迁移步骤。 步骤一:备份原数据库 在进行数据库迁移前,务必备份好原数据库,防止数据在迁移过程中丢失。可以使用MySQL自带的命令行工具mysqldump进行备份,具体操作如下: # 备份整个数据库,将数据导出到文件中 my…

    database 2023年5月21日
    00
  • MongoDB如何对数组中的元素进行查询详解

    下面是MongoDB如何对数组中的元素进行查询的攻略: 1. 基本语法 MongoDB数组查询需要用到操作符 $elemMatch,其基本语法如下: db.collection.find({array_field: {$elemMatch: {field1: value1, field2: value2}}}) 其中: db.collection 表示要从哪…

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