前言:
眼前朋友们对“关闭mysql的严格模式”大体比较注意,咱们都需要学习一些“关闭mysql的严格模式”的相关文章。那么小编在网摘上收集了一些对于“关闭mysql的严格模式””的相关内容,希望朋友们能喜欢,你们一起来了解一下吧!一、从一个实验开始
首先创建数据表
id为not null类型,我们像下面这样插入。
所以说默认情况下,如果该列要求不能为null。用户还往里面写入null,就会报错:cannot be null
当然本篇文章并没有结束,下面跟大家分享另外一个拓展知识:sql mode 。
这个拓展知识点也是下一篇文章“ 能谈谈 date、datetime、time、timestamp、year的区别吗?” 的储备知识。
二、sql 的执行模式
这就引出了一个 sql_mode 的概念,也就是SQL的执行模式。
默认情况下MySQL会用严格模式运行SQL。
你可以像下面这样查看MySQL使用了哪些sql mode。
MySQL会根据sql_mode系统变量的值将这些模式不同地应用于不同的客户端。
使用不同的sql mode执行sql,可能会得到不同的响应结果。
三、做几个小实验
为了更直观地看出sql mode 对sql执行结果的影响,推荐你看一下下面的这两个小Demo,都不复杂。
Demo1:
创建一张简单的表 t3,id非空、没有默认值。
先看看默认的情况下,会有什么响应!
在默认的sql mode下,执行一条插入空值的语句,发现报错了
再看看,关闭严格的sql mode后会有什么响应。
关闭严格模式后执行的结果如下图所示。
你会发现这次结果是 wanring + MySQL帮你插入默认值
Demo2:
默认开启严格模式后往int类型的列插入空串(任意串)会报错。
关闭严格模式后,执行下面的SQL会爆出wanrning。
查看插入的结果
从上面的实验来看,相信你已经看出了:无论是否开启了严格模式,MySQL都不允许往not null字段插入null值,它不会因为你插入null,而将null转成该数据类型的0值。
所谓的严格模式,就是将参数 NO_AUTO_CREATE_USER 设置为sql mode
四、需要你了解的几个 sql mode
下面再为大家介绍几个和日期相关的sql mode。
研发的同学了解就好了,不用刻意记住它,了解就是加分项!
1、STRICT_TRANS_TABLES:
将其加入到sql_mode之后,MySQL会判断是否可以直接把用户给的值插入事务表中,如果不能就中止该语句。对于非事务表,如果该值出现在单行语句或多行语句的第一行中,则中止该语句。
结合上面的例子可以更好地理解STRICT_TRANS_TABLES的作用。
2、NO_ZERO_IN_DATE
将其加入到sql_model之后,MySQL将不允许你将诸如 0000-10-10、2020-00-10、2020-10-00等年份、月份、日期为零的值插入到Date列中。
目前该参数处于目前该参数默认会生效,但是在未来的版本中将会被删除。
3、NO_ZERO_DATE:
该参数控制MySQL是否允许将 '0000-00-00'作为有效日期。
如果未启用此模式, '0000-00-00'允许插入不会产生警告。如果启用此模式,'0000-00-00' 允许插入且产生警告。如果启用了此模式和严格模式, '0000-00-00' 插入产生错误,除非 IGNORE同样给出。对于 INSERT IGNORE和UPDATE IGNORE,'0000-00-00'允许插入且产生警告。
结语
本文到这里就行将结束了,主要跟大家分享一个 sql mode 拓展知识点。
作为研发同学的你了解就好了,如果没时间去实际操作一下就看下我上面的小Demo。不积跬步,无以至千里。
原文链接:
标签: #关闭mysql的严格模式