关系数据库-9-[mysql8]中的语法校验规则sql_mode应用

这篇具有很好参考价值的文章主要介绍了关系数据库-9-[mysql8]中的语法校验规则sql_mode应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mysql中sql_mode使用详解

1 sql_mode简介

sql_mode是一组mysql的语法校验规则,定义了mysql应该支持的sql语法、数据校验等。

1.1 查看当前的sql_mode

查看当前的sql_mode,三种方式:
(1)select @@sql_mode;
(2)select @@SESSION.sql_mode;
(3)select @@GLOBAL.sql_mode;
输出如下:
STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,
NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,
NO_ENGINE_SUBSTITUTION

1.2 如何设置sql_mode

方式一:通过命令设置
SET sql_mode = '';
SET SESSION sql_mode = '';
SET GLOBAL sql_mode = '';

方式二:修改mysql的配置文件my.cnf
修改后需要重启mysql服务使其生效
[mysqld]
sql_mode = ANSI

1.3 sql_mode模式

1.3.1 ANSI模式

这是一种宽松模式,该模式下,会对所操作数据进行校验,如果不符合校验规则,数据会按照规则执行,并报warning警告。

该模式下,sql_mode参数为:
REAL_AS_FLOAT,
PIPES_AS_CONCAT,
ANSI_QUOTES,
IGNORE_SPACE,
ANSI

1.3.2 STRICT_TRANS_TABLES模式

这是一种严格模式,该模式下,会对所操作数据进行严格校验,如果不符合校验规则,报error错误。

该模式下,sql_mode参数为:
STRICT_TRANS_TABLES

1.3.3 TRADITIONAL模式

这是一种严格模式,该模式下,会对所操作数据进行严格校验,如果不符合校验规则,报error错误。用于事务时,会进行事物的回滚,保证了错误数据无法插入到数据库中。

该模式下,sql_mode参数为:
STRICT_TRANS_TABLES,
STRICT_ALL_TABLES,
NO_ZERO_IN_DATE,
NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,
TRADITIONAL,
NO_AUTO_CREATE_USER,
NO_ENGINE_SUBSTITUTION

1.4 常用sql_mode各参数详解

1、PIPES_AS_CONCAT
将"||"作为字符串的链接字符操作,而不是作为或运算符,
与"concat"相类似。

2、ANSI_QUOTES
不能用双引号来引用字符串,因为它会被解释为识别符。

3、IGNORE_SPACE
用于忽略mysql系统函数与之后的括号之间的空格。

4、STRICT_TRANS_TABLES和STRICT_ALL_TABLES
严格模式的一种,会对所操作数据进行严格校验。
如果不符合校验规则,报error错误。

5、NO_ZERO_IN_DATE
在严格模式下,不允许日期和月份为零。

6、NO_ZERO_DATE
在严格模式下,不允许插入0日期。

7、ERROR_FOR_DIVISION_BY_ZERO
在严格模式下,不允许在字段中插入除数为0的运算值,会直接报错。
直接计算除数为0的运算,返回null,报warning。

8、ONLY_FULL_GROUP_BY
select后面的字段中,只能出现分组列和聚合列。

9、其他
NO_AUTO_CREATE_USER(用户)
ALLOW_INVALID_DATES(日期)
HIGH_NOT_PRECEDENCE(not优先级)
NO_AUTO_VALUE_ON_ZERO(主键)
NO_BACKSLASH_ESCAPES(反斜杠)
NO_DIR_IN_CREATE(数据目录)
NO_ENGINE_SUBSTITUTION(存储引擎)
NO_UNSIGNED_SUBTRACTION(无符号数相减计算)
PAD_CHAR_TO_FULL_LENGTH(char字段存储)
TIME_TRUNCATE_FRACTIONAL(时间类型超出范围处理)

1.5 不同版本默认的sql_mode

MySQL 5.5:空

MySQL 5.6:NO_ENGINE_SUBSTITUTION【存储引擎】

MySQL 5.7:
ONLY_FULL_GROUP_BY,【select后面的字段中,只能出现分组列和聚合列】 
STRICT_TRANS_TABLES,【严格模式的一种,会对所操作数据进行严格校验】
NO_ZERO_IN_DATE, 【在严格模式下,不允许日期和月份为零】
NO_ZERO_DATE, 【在严格模式下,不允许插入0日期】
ERROR_FOR_DIVISION_BY_ZERO, 【在严格模式下,不允许在字段中插入除数为0的运算值,会直接报错】
NO_AUTO_CREATE_USER, 【用户】 
NO_ENGINE_SUBSTITUTION【存储引擎】

MySQL 8.0:
ONLY_FULL_GROUP_BY, 【select后面的字段中,只能出现分组列和聚合列】 
STRICT_TRANS_TABLES, 【严格模式的一种,会对所操作数据进行严格校验】
NO_ZERO_IN_DATE, 【在严格模式下,不允许日期和月份为零】
NO_ZERO_DATE, 【在严格模式下,不允许插入0日期】
ERROR_FOR_DIVISION_BY_ZERO, 【在严格模式下,不允许在字段中插入除数为0的运算值,会直接报错】
NO_ENGINE_SUBSTITUTION【存储引擎】

2 实际应用

1.查询当前 mysql 数据库 的 SQL_MODE
select @@SQL_MODE

如果包含 ANSI_QUOTES

2.修改my.cnf
SQL_MODE=ONLY_FULL_GROUP_BY,
STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,
NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,
NO_ENGINE_SUBSTITUTION

保存配置文件,之后重启mysql 服务

3.然后再次验证
select @@SQL_MODE

SQL验证
select REPLACE(uuid(),“-”,“”) from DUAL文章来源地址https://www.toymoban.com/news/detail-433708.html

到了这里,关于关系数据库-9-[mysql8]中的语法校验规则sql_mode应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL8.0+数据库GTID主从模式搭建

    参见: MySQL数据库8.0+版本部署安装-CSDN博客 部署环境[例]: 主库:192.168.179.153:3306 从库:192.168.179.154:3306 主从库开启GTID模式 // 主从库均修改,修改从库配置文件,在[mysqld]下添加如下配置 $ vim /etc/my.cnf gtid_mode = on enforce_gtid_consistency = on 需检查server-id配置,为主从架构中的所有

    2024年02月04日
    浏览(46)
  • java连接mysql8.0数据库—jdbc连接

    mysql官网 点击platform Independent ,然后出现jar包选项 点download 点左下角no thanks,直接下载 原始方法,直接在项目下建一个lib包 然后将刚刚下好的zip解压,复制jar包到该目录下,右键jar包,选择add as Library 出现一堆包,表示成功导入jar包 注意:Driver类创建时,要导入com.mysql.cj.

    2024年02月13日
    浏览(42)
  • MySQL8.0数据库超详细安装教程全过程

    1、官网下载MySQL8.0地址:MySQL :: Download MySQL Installer (Archived Versions) 2、 双击安装包进行安装 3、自定义安装 4、选择MySQL Server8.0   5、创建MYSQL数据存储目录及安装目录 6、配置安装路径及数据存储目录 7、确认继续 8、选择MySQL,下一步 9、开始安装 10、第一次安装需要C++的依赖

    2024年02月08日
    浏览(53)
  • centos9 mysql8修改数据库的存储路径

    系统:CentOS Stream release 9 mysql版本:mysql Ver 8.0.34 for Linux on x86_64 (MySQL Community Server - GPL) 查看目录数据存储的位置 操作 1、新建存放的目录,拷贝原数据库内容到新建目录 关闭selinux 永久关闭 vi /etc/selinux/config 设置 SELINUX=disabled,即可 2、修改mysql配置文件 my.cnf内容如下 3、重新

    2024年02月11日
    浏览(33)
  • mysql8.0无法创建数据库 解决root无法授权问题

    mysql的赋权操作:GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘你的密码‘ WITH GRANT OPTION; mysql赋权操作: use mysql; GRANT ALL PRIVILEGES ON *.* TO \\\'root\\\'@\\\'%\\\' IDENTIFIED BY \\\'你的密码\\\' WITH GRANT OPTION; flush privileges; GRANT:赋权命令 ALL PRIVILEGES:当前用户的所有权限 ON:介词 *.*:当前用户

    2024年02月12日
    浏览(26)
  • 重学MySQL之关系型数据库和非关系型数据库

    1.1 关系型数据库的特性 1.1.1 事务的特性 事务,是指一个操作序列,这些操作要么都执行,或者都不执行,而且这一序列是无法分隔的独立操作单位。也就是符合原子性(Atomicity)、 一致性(Consistency)、 隔离性(Isolation)和持久性(Durability)的一组操作。 原子性:指一个

    2024年02月02日
    浏览(59)
  • 快速生成 MySQL 数据库关系图

    在公司老旧系统里,数据库表很多,但是在设计之初并没有建立好关系图,导致新人刚入职,面对N个库,每个库几百张表,很不方便。 例如:公司某一个系统的库有三百张表,在不熟悉项目的情况下,打开数据库看到一列列的表,很不清晰,对新入职同事很不友好。 我们一个

    2024年02月04日
    浏览(33)
  • 【数据库】MySQL数据约束和表关系详解

    目录 1.数据库约束 1.1约束类型 1.2NULL约束 1.3UNIQUE:唯一约束 1.4DEFAULT:默认值约束 1.5PRIMARY:主键约束 1.6FOREIGH KEY:外键约束 2.表的关系 2.1一对一 2.2一对多 2.3多对多 数据库中的数据保存在数据表中,在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候

    2024年02月04日
    浏览(33)
  • 【MySQL】——关系数据库标准语言SQL(大纲)

    🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:数据结构_IT闫的博客-CSDN博客 🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客 💎C++:C++_IT闫的博客-CSDN博

    2024年01月20日
    浏览(45)
  • MySQL——性能优化与关系型数据库

    吞吐与延迟:有些结论是反直觉的,指导我们关注什么。 没有量化就没有改进:监控与度量指标,指导我们怎么去入手。 80/20原则:先优化性能瓶颈问题,指导我们如何去优化。 过早的优化是万恶之源:指导我们要选择优化的时机。 脱离场景谈性能都是耍流氓:指导我们对

    2024年02月01日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包