sql_mode详解

文章目录

一、sql_mode作用

  • sql_mode是一组语法校验规则

二、查询sql_mode

  • 执行sql查询
sql 复制代码
select @@GLOBAL.sql_mode
sql 复制代码
select @@SESSION.sql_mode
  • 查看my.conf配置文件(文件夹路径为)
txt 复制代码
C:\ProgramData\MySQL\MySQL Server 8.0

三、mysql8默认的mode配置(6个默认配置)

txt 复制代码
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

四、常见mode详细解释

mysql8默认配置了的mode(6个)

  • ONLY_FULL_GROUP_BY:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
  • STRICT_TRANS_TABLES:如果一个值不能插入到一个事务中,则中断当前的操作,对非事务表不做限制
  • NO_ZERO_IN_DATE:不允许日期和月份为零
  • NO_ZERO_DATE:mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
  • ERROR_FOR_DIVISION_BY_ZERO:在insert或update过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时Mysql返回NULL
  • NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

需要自己配置的mode(4个)

  • NO_AUTO_VALUE_ON_ZERO:该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
  • NO_AUTO_CREATE_USER:禁止GRANT创建密码为空的用户
  • PIPES_AS_CONCAT:将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样是,也和字符串的拼接函数Concat想类似
  • ANSI_QUOTES:不能用双引号来引用字符串,因为它被解释为识别符

五、设置sql_mode(一旦设置了,就不会再用默认配置的mode规则)

命令行设置(两个都可以),重启失效

sql 复制代码
SET GLOBAL SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
sql 复制代码
SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

配置文件设置

  • 加下面这行,按需添加mode(作者只是举例)
txt 复制代码
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

参考文档

相关推荐
apcipot_rain3 小时前
【应用密码学】实验五 公钥密码2——ECC
前端·数据库·python
辛一一5 小时前
neo4j图数据库基本概念和向量使用
数据库·neo4j
LJianK16 小时前
关系型数据库和非关系型数据库
sql
巨龙之路6 小时前
什么是时序数据库?
数据库·时序数据库
蔡蓝6 小时前
binlog日志以及MySQL的数据同步
数据库·mysql
是店小二呀7 小时前
【金仓数据库征文】金融行业中的国产化数据库替代应用实践
数据库·金融·数据库平替用金仓·金仓数据库2025征文
炒空心菜菜8 小时前
SparkSQL 连接 MySQL 并添加新数据:实战指南
大数据·开发语言·数据库·后端·mysql·spark
多多*8 小时前
算法竞赛相关 Java 二分模版
java·开发语言·数据结构·数据库·sql·算法·oracle
爱喝酸奶的桃酥8 小时前
MYSQL数据库集群高可用和数据监控平台
java·数据库·mysql
数据库幼崽8 小时前
MySQL 8.0 OCP 1Z0-908 61-70题
数据库·mysql·ocp