返回顶部
首页 > 资讯 > 数据库 >设置和查询MYSQL SQL模式方法
  • 154
分享到

设置和查询MYSQL SQL模式方法

2024-04-02 19:04:59 154人浏览 八月长安
摘要

下面一起来了解下设置和查询Mysql sql模式方法,相信大家看完肯定会受益匪浅,文字在精不在多,希望设置和查询mysql SQL模式方法这篇短内容是你想要的。设置和查询SQL模式通过修改sql_mode变

下面一起来了解下设置和查询Mysql sql模式方法,相信大家看完肯定会受益匪浅,文字在精不在多,希望设置和查询mysql SQL模式方法这篇短内容是你想要的。

设置和查询SQL模式

通过修改sql_mode变量的值来改变SQL模式。
SQL模式可以在全局级别下设置,也可以在会话级别下设置。在数据库启动时和数据库运行时都可以对sql_mode的值进行修改。

在数据库启动时设置SQL模式

在命令行中使用--sql_mode='modes'选项,或者在配置文件中使用sql_mode="modes"。
modes是一个以逗号分隔的模式的列表。
要清除SQL模式,将它设置为一个空的字符串,例如sql_mode=""

在数据库运行时设置SQL模式

设置和查询MYSQL SQL模式方法

使用SET语句来更改sql_mode的值,例如:

SET GLOBAL sql_mode = 'modes';
SET SESSioN sql_mode = 'modes';

设置全局变量的值需要SUPER权限,设置后应用到之后所有客户端连接的操作。
设置session变量只应用于当前客户端,每个客户端都可以在任何时候更改它的sessionSQL模式。

查询SQL模式

要确定当前使用的SQL模式,使用以下语句进行查询

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

主要的SQL模式

主要的sql_mode的值为以下几种:

  • ANSI
    这是一个组合模式,它似的语法和行为更符合标准的SQL
  • STRICT_TRANS_TABLES
    事务表的严格模式。在这种模式下,如果一个值不能被插入到事务表中,则终止该语句。对于非事务表,如果不能插入的值发生在单行语句或者多行语句的第一行,也会终止该语句。
  • TRADITIONAL
    传统模式,这也是一个组合模式。在这种模式下,当插入一个不正确的值时,会给出错误而不是警告。(在非事务性存储引擎中,可能这不是我们想要的,因为在发生错误时语句会中断,但是在错误发生前进行的数据修改不能够回滚,从而导致部分更新。)

SQL模式的完整列表

sql模式可以大致分为以下几类

严格模式(包括STRICT_ALL_TABLES和STRICT_TRANS_TABLES)
  • STRICT_ALL_TABLES
    对于所有存储引擎启用严格模式,无效的值会被拒绝。
  • STRICT_TRANS_TABLES
    对于事务存储引擎启用严格模式,并在可能的情况下对飞事务存储引擎启用严格模式。

在MySQL5.7.4到MySQL5.7.7中,严格模式包括ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE和NO_ZERO_IN_DATE的效果。

用来限制0值,和严格模式一同使用的
  • NO_ZERO_DATE
    影响数据库是否允许'0000-00-00'作为一个有效的日期。其效果还取决于是否启用了严格模式
    如果启用了该模式,允许'0000-00-00'值并且插入不会产生警告
    如果禁用了该模式,允许'0000-00-00'值但是插入会产生警告
    如果该模式和严格模式同时启用,除非同时给出IGNORE,否则不允许'0000-00-00'插入并产生错误
  • NO_ZERO_IN_DATE
    影响数据库是否允许在年份非0时,月份或日期为0。其效果还取决于是否启用了严格模式。
    如果启用了该模式,允许包括0的日期值并且插入不会产生警告。
    如果禁用了该模式,允许包括0的日期值但是插入会产生警告。
    如果该模式和严格模式同时使用,除非同时给出IGNORE,否则不允许插入包含0的日期值并且插入会产生错误。对于INSERT IGNORE和UPDATE IGNORE,包含0的日期值会作为'0000-00-00'插入并产生警告
  • ERROR_FOR_DIVISION_BY_ZERO
    影响数据库是否允许将0作为除数,包括MOD(N,0)。其效果还取决于是否启用了严格模式
    如果启用了该模式,允许以0作为除数并且插入不会产生警告
    如果禁用了该模式,允许以0作为除数但是插入会产生警告
    如果该模式和严格模式同时使用,除非同时给出IGNORE,否则不允许以0作为除数并且插入会产生错误。对于INSERT IGNORE和UPDATE IGNORE,以0作为除数会插入NULL并产生警告。

在MySQL5.7.4以前版本中,以上三个模式被弃用
在MySQL5.7.4到MySQL5.7.7中,以上三个模式不产生作用,他们的效果包含在严格模式中。
在MySQL5.7.8及以后版本中,以上三个模式才有自己单独的作用,而不是严格模式的一部分。但是,他们应该和严格模式一起使用,并且默认情况下他们都是开启的。如果使用严格模式而不使用上述模式会产生警告,如果使用上述模式中的任何一个但是不启用严格模式也会产生警告。
由于以上三个模式以弃用,在后续的MySQL版本中,他们作为一个单独的模式名会被删除,并且他们的效果将包含在严格模式中。

用来说明符号的作用的
  • ANSI_QUOTES
    将"作为标识符(与`相同)而不是作为字符串的引用符号。在启用此模式的情况下,仍然可以使用`作为引用标识符,但是不能使用双引号来引用文本字符串。
  • PIPES_AS_CONCAT
    将||作为字符串连接操作符(与CONCAT()相同),而不是作为OR的同义词
  • REAL_AS_FLOAT
    将REAL作为FLOAT的同义词。默认情况下,MySQL将REAL视为DOUBLE的同义词。
  • NO_BACKSLASH_ESCAPES
    禁用反斜杠字符()作为字符串中的转义字符。在启用此模式后,反斜杠就变成了一个普通字符。
    影响语句的方式或结果的
  • NO_UNSIGNED_SUBTRACTION
    对于整数之间的减法,如果一个值的类型是UNSIGNED,默认生成一个无符号整型的结果,但是如果结果是个负数,就会出现错误
    如果启用NO_UNSIGNED_SUBTRACTION,结果为负时不会报错

  • IGNORE_SPACE
    在函数名和(中间允许空格。这将导致内置函数名被当作保留字处理。因此,与函数名相同的标识符必须被引用。
    例如,因为存在COUNT()函数,直接使用count作为表名会产生错误

    mysql> CREATE TABLE count (i INT);
    ERROR 1064 (42000): You have an error in your SQL syntax

    应该将表名引用起来:

    mysql> CREATE TABLE count (i INT);
    Query OK, 0 rows affected (0.00 sec)

  • HIGH_NOT_PRECEDENCE
    在MySQL5.7中,NOT a BETWEEN b AND C的计算顺序为,NOT (a BETWEEN b AND c)
    启用HIGH_NOT_PRECEDENCE后,该顺序更改为(NOT a) BETWEEN b AND c
用来限制SHOW CREATE TABLE语句的输出结果的
  • NO_FIELD_OPTIONS
    在SHOW CREATE TABLE的输出中不显示特定与MySQL的列选项
  • NO_KEY_OPTIONS
    在SHOW CREATE TABLE的输出中不显示特定与MySQL的索引选项
  • NO_TABLE_OPTIONS
    在SHOW CRETAE TABLE的输出中不显示特定与MySQL的表选项
影响数据库的行为的
  • NO_AUTO_CREATE_USER
    如果不指定身份验证信息,GRANT语句不会自动创建用户。GRANT语句必须使用IDENTIFIED BY语句指定一个非空的密码或者使用IDENTIFIED WITH语句指定认证插件
    建议使用CREATE USER语句来创建用户
  • NO_AUTO_VALUE_ON_ZERO
    NO_AUTO_VALUE_ON_ZERO 影响对于自动增长列的处理。通常,通过插入NULL或者0来生成下一个序列号。NO_AUTO_VALUE_ON_ZERO允许在自动增长列中插入0值,这样只有插入NULL才能生成下一个序列号。
  • NO_ENGINE_SUBSTITUTION
    当一个语句,例如CREATE TABLE或ALTER TABLE指定一个禁用或者未编译的存储引擎时,自动替换为默认存储引擎。当没有启用NO_ENGINE_SUBSTITUTION时。如果指定的存储引擎不可用,对于CREATE TABLE,使用默认存储引擎并生成警告,对于ALTER TABLE,生成警告并且不会对表进行修改。
    当启用NO_ENGINE_SUBSTITUTION时,如果指定的存储引擎不可用,无论是创建表还是修改表都会导致错误。
  • PAD_CHAR_TO_FULL_LENGTH
    默认情况下,在查询时,CHAR列末尾的空格会自动删除。启用PAD_CHAR_TO_FULL_LENGTH,则不会删除空格,将查询到的CHAR值补全到完整的列长度。
  • NO_DIR_IN_CREATE
    在创建表时,忽略所有INDEX DIRECTORY和DATA DIRECTORY指令。这个选项在复制的从库中很有用。
  • ONLY_FULL_GROUP_BY
    在SELECT HAVING或者ORDER BY列表中不能包含没有在GROUP BY子句中命名或者不能通过GROUP BY子句唯一确定的列
    请参考Http://www.ywnds.com/?p=8184
  • ALLOW_INVALID_DATES
    允许无效的日期,只检查月份在1-12之间和日期在1-31之间,不对日期进行完整的检查。这个模式只应用与DATE和DATETIME列。在严格模式禁用的情况下,诸如"2018-02-31"这样的无效日期会被转换为'0000-00-00‘并产生警告,如果启用了严格模式,这样的无效日期会产生错误。

SQL模式的组合

以下模式是对上述SQL模式完整列表中的部分组合的缩写

名称完整列表
ANSIREAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE,和 (在MySQL 5.7.5) ONLY_FULL_GROUP_BY
DB2PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS
MSSQLPIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS
postgresqlPIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS
oraclePIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER
MAXDBPIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER
TRADITIONALSTRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER,  NO_ENGINE_SUBSTITUTION

看完设置和查询MYSQL SQL模式方法这篇文章后,很多读者朋友肯定会想要了解更多的相关内容,如需获取更多的行业信息,可以关注我们的数据库栏目。

您可能感兴趣的文档:

--结束END--

本文标题: 设置和查询MYSQL SQL模式方法

本文链接: https://lsjlt.com/news/34541.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 设置和查询MYSQL SQL模式方法
    下面一起来了解下设置和查询MYSQL SQL模式方法,相信大家看完肯定会受益匪浅,文字在精不在多,希望设置和查询MYSQL SQL模式方法这篇短内容是你想要的。设置和查询SQL模式通过修改sql_mode变...
    99+
    2024-04-02
  • 怎么设置MySQL SQL模式
    这篇文章主要讲解了“怎么设置MySQL SQL模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么设置MySQL SQL模式”吧!MySQL服务器可以以不...
    99+
    2024-04-02
  • MySQL模糊查询的三种方式
    文章目录 一、Mybatis常用模糊查询方法1.使用concat("%",#{name},"%")2.使用'%${name}%'3.使用"%"#{name}"%"总结: ...
    99+
    2023-09-01
    mysql mybatis java
  • MySQL的连接方式和多表查询方法
    本篇内容主要讲解“MySQL的连接方式和多表查询方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL的连接方式和多表查询方法”吧!目录MySQL 内连接、左连接、右连接、外连接、多表查询...
    99+
    2023-06-20
  • SQL模糊查询的用法
    这篇文章主要介绍“SQL模糊查询的用法”,在日常操作中,相信很多人在SQL模糊查询的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL模糊查询的用法”的疑惑有所帮助!接...
    99+
    2024-04-02
  • Mysql模糊查询有哪几种方式
    不知道大家之前对类似Mysql模糊查询有哪几种方式的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完Mysql模糊查询有哪几种方式你一定会有所收获的。  &...
    99+
    2024-04-02
  • mysql的join查询和多次查询方式比较
    目录join查询和多次查询比较查询语句join、on、where执行顺序一、典型SELECT语句完整的执行顺序二、from三、on四、on 条件与where 条件五、join 流程总结join...
    99+
    2023-03-09
    mysql查询 mysqljoin查询 mysql多次查询
  • SQL时间类型的模糊查询方法
    这篇文章主要讲解了“SQL时间类型的模糊查询方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL时间类型的模糊查询方法”吧!今天用time Like &...
    99+
    2024-04-02
  • mysql主从模式同步的设置方法
    本篇内容介绍了“mysql主从模式同步的设置方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!http:/...
    99+
    2024-04-02
  • 模糊查询方法
    一、MySQL通配符模糊查询(%,_) 1-1. 通配符的分类 "%" 百分号通配符: 表示任何字符出现任意次数 (可以是0次)。 "_" 下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符。当然,也可以like "陈___...
    99+
    2023-09-02
    数据库 mysql java
  • mysql锁查询方式
    下面讲讲关于mysql锁查询方式,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完mysql锁查询方式这篇文章你一定会有所受益。select  IFNULL(w...
    99+
    2024-04-02
  • mysql限制sql查询时间的方法
    这篇文章主要介绍了mysql限制sql查询时间的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql限制sql查询时间的方法:1、查询今...
    99+
    2024-04-02
  • SQL Server模糊查询的常见方法总结
    在数据查询的时候,有完整查询和模糊查询之分.在Access和SQL Server中使用模糊查询有一下几种查询: 1.用_通配符查询 "_"号表示任意单个字符,该字符号只能匹配一个字符...
    99+
    2024-04-02
  • sql批量模糊查询的方法是什么
    在SQL中,批量模糊查询可以通过使用通配符和IN子句来实现。以下是一种常见的方法:1. 使用通配符进行模糊查询:通配符是用来匹配搜索...
    99+
    2023-08-24
    sql
  • vue和js中实现模糊查询方式
    目录vue和js实现模糊查询如何实现?方法1方法2方法3正则表达式实现模糊查询vue和js实现模糊查询 先来看效果图 这种数据量少的场景适用于前端实现模糊查询 如何实现? <...
    99+
    2022-11-13
    vue 模糊查询 js 模糊查询 vue实现模糊查询
  • MyBatis动态sql查询及多参数查询方式
    目录MyBatis动态sql动态sql处理简单的多参数查询动态sql处理更新功能动态sql扩展动态sql处理集合参数foreach标签处理数组类型参数  &nbs...
    99+
    2022-11-13
    MyBatis sql查询 动态sql查询 多参数查询
  • MySQL中的流式查询及游标查询方式
    目录一、业务场景二、罗列一下三种处理方式2.1 常规查询2.2 流式查询2.3 游标查询三、RowData3.1 RowDataStatic3.2 RowDataDynamic3.3 RowDataCursor四、JDB...
    99+
    2022-08-17
    MySQL查询 流式查询 游标查询 MySQL游标
  • mysql的join查询和多次查询方法是什么
    这篇文章主要讲解了“mysql的join查询和多次查询方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql的join查询和多次查询方法是什么”...
    99+
    2023-03-09
    mysql join
  • sql多个like模糊查询的方法是什么
    在SQL中,可以使用多个`LIKE`模糊查询的方法有以下几种:1. 使用多个`LIKE`语句结合`AND`操作符:```sqlSEL...
    99+
    2023-08-30
    sql
  • SQL查询方法有哪些
    SQL查询方法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、 简单查询   简单的Transact-SQL查询只包括选择列表、FRO...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作