面试题:对NotNull字段插入Null值 有啥现象?
Hi,大家好!我是白日梦。
今天我要跟你分享的话题是:“对NotNull字段插入Null值有啥现象?”
一、 推荐阅读
首发地址:https://mp.weixin.qq.com/s/b30fKiQJTZARZazQdv6WKw
使用推荐阅读,有更好的阅读体验,公众号首发!分享不易,欢迎关注~
二、从一个实验开始
首先创建数据表

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'允许插入且产生警告。
参考:
https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
六、结语
下一篇文章白日梦将结合本节的 sql mode 同你分享另一个话题:
“能谈谈 date、datetime、time、timestamp、year的区别吗?”
为大家带来MySQL面试专题!本文是第 3 篇、全文110篇!公众号首发!
以问答的方式,由浅入深的帮你应对各类MySQL面试题的狂轰滥炸!当然也不乏会分享一些高阶读写分离数据库中间件原理及落地的技术实现,为你揭开数据库中间件神秘的面纱!
面试官都关注了!你还在犹豫什么呢?
查看MySQL专题110篇文章大纲:https://mp.weixin.qq.com/s/HTw-Z-SyprYA8bCBZ4NpGQ

面试题:对NotNull字段插入Null值 有啥现象?的更多相关文章
- mysql中,通过json_insert函数向json字段插入键值?json_insert函数的使用?
需求描述: 通过json_insert向json字段中插入值,在此进行实验,记录下. 操作过程: 1.查看已经有的包含json数据类型的表 mysql> select * from tab_js ...
- c# access插入null值
c# 插入access数据库 提示错误: Parameter @DeviceLocation has no default value. 参数@DeviceLocation 的有没有默认值. Stri ...
- mysql where 条件中的字段有NULL值时的sql语句写法
比如你有一个sql语句联表出来之后是这样的 id name phone status 1 张三 ...
- Mybatis 插入null值报错
解决方法: 1.在settings中配置 <setting name="jdbcTypeForNull" value="OTHER"/> MyBat ...
- jdbc 占位符插入null值 NullPointerException
如果变量flag 为空 ,那么executeUpdate 后面的参数 bookCollect.getFlag() 就会被executeUpdate()方法忽略掉,程序会报错. String addSq ...
- Ibatis insert语句插入null引发的错误
公司使用的orm框架为ibatis,其中默认的insert语句一直都是这样写的: <insert id="insert" parameterClass="activ ...
- MySQL NULL 值处理
MySQL NULL 值处理 我们已经知道MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. 为了 ...
- FDQuery 怎么能插入NULL参数
[FireDAC][Phys][MSSQL]-335. Parameter [fieldAA] data type is unknown. Hint: specify TFDParam.DataTyp ...
- 吴裕雄 20-MySQL NULL 值处理
MySQL NULL 值处理我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作.为了 ...
随机推荐
- Flutter 开发从 0 到 1(四)ListView 下拉加载和加载更多
在<APP 开发从 0 到 1(三)布局与 ListView>我们完成了 ListView,这篇文章将做 ListView 下拉加载和加载更多. ListView 下拉加载 Flutter ...
- 多测师讲解常用的测试工具分为10类_高级讲师肖sir
我们将常用的测试工具分为10类. 1. 测试管理工具 2. 接口测试工具 3. 性能测试工具 4. C/S自动化工具 5.白盒测试工具 6.代码扫描工具 7.持续集成工具 8.网络测试工具 9.app ...
- 【C语言/C++程序员编程】一小时做出来的数字雨(一颗开花的树)!
相信大家看过许许多多的关于计算机黑客.骇客.人工智能.AI方面的电影,每当黑客入侵某个五角大楼,某个网站时,都会出现这样一副画面: 入侵 或者这样的: 数字雨 然后就轻而易举的成功入侵夺取管理员权限了 ...
- 【原创】xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(三)--实时与非实时数据交互
版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 1.概述 1.概述 [原创]实时IPC概述 [ ...
- 《Kafka笔记》1、Kafka初识
目录 一.初识Kafka 1 apache kafka简介 2 消息中间件kafka的使用场景 2.1 订阅与发布队列 2.2 流处理 3 kafka对数据的管理形式 4 kafka基础架构 5 Ka ...
- MS SQL SERVER执行大脚本文件时,提示“内存不足”的解决办法
问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是当数据库导出脚本很大,用Microsoft SQL Server Management Studio执行 ...
- python 虚拟环境安装
windows虚拟环境的搭建 安装 # 建议使用pip3安装到python3环境下 pip3 install virtualenv pip3 install virtualenvwrapper-win ...
- Pytest之使用断言指定异常
官网的翻译是使用断言抛出指定异常,当我觉得他这里更应该指的是 Pytest 断言错误类型# 使用raise在测试方法中指定异常的类型,这点和java还是蛮像的呢,具体示例如下: import pyte ...
- windows下安装mongodb4.x版本
一个无名前辈的血汗经验,提醒来者 现在mongod出到4.x的版本,而网上的大多数教程是针对3.x的版本的.在4.x的版本中,不要再试图使用自定义安装,我搞了3个多小时都没搞定,如果土豪c盘很大,直接 ...
- 阿里技术专家十五问,真题面试刀刀见肉,快来和阿里面试官battle
引言 2020阿里巴巴专家组出题,等你来答: 题目:如何判断两个链表是否相交 出题人:阿里巴巴新零售技术质量部 参考答案: $O(n^2)$: 两层遍历,总能发现是否相交 $O(n)$: 一层遍历,遍 ...