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 IGNOREUPDATE 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值 有啥现象?的更多相关文章

  1. mysql中,通过json_insert函数向json字段插入键值?json_insert函数的使用?

    需求描述: 通过json_insert向json字段中插入值,在此进行实验,记录下. 操作过程: 1.查看已经有的包含json数据类型的表 mysql> select * from tab_js ...

  2. c# access插入null值

    c# 插入access数据库 提示错误: Parameter @DeviceLocation has no default value. 参数@DeviceLocation 的有没有默认值. Stri ...

  3. mysql where 条件中的字段有NULL值时的sql语句写法

    比如你有一个sql语句联表出来之后是这样的 id           name            phone                  status 1            张三     ...

  4. Mybatis 插入null值报错

    解决方法: 1.在settings中配置 <setting name="jdbcTypeForNull" value="OTHER"/> MyBat ...

  5. jdbc 占位符插入null值 NullPointerException

    如果变量flag 为空 ,那么executeUpdate 后面的参数 bookCollect.getFlag() 就会被executeUpdate()方法忽略掉,程序会报错. String addSq ...

  6. Ibatis insert语句插入null引发的错误

    公司使用的orm框架为ibatis,其中默认的insert语句一直都是这样写的: <insert id="insert" parameterClass="activ ...

  7. MySQL NULL 值处理

    MySQL NULL 值处理 我们已经知道MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. 为了 ...

  8. FDQuery 怎么能插入NULL参数

    [FireDAC][Phys][MSSQL]-335. Parameter [fieldAA] data type is unknown. Hint: specify TFDParam.DataTyp ...

  9. 吴裕雄 20-MySQL NULL 值处理

    MySQL NULL 值处理我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作.为了 ...

随机推荐

  1. Go path/filepath包

    path/filepath 标准库path中有的功能filepath全部具备, 所以使用filepath即可. isABS() 判断一个路径是不是绝对路径. package main import ( ...

  2. Word云(标签云)生成器控件。net Windows。形式在c#中

    下载demo - 37.1 KB 下载source code - 48.7 KB 背景 这种控制方式的灵感来自于一种名为Wordle的基于网络的免费单词云生成器.实际上,这个控件是我的项目http:/ ...

  3. 多测师讲解自动化 _rf 变量_高级讲师肖sir

    rf变量 log 打印全局变量 列表变量: 字典变量: 查看当前工程下的变量 紫色表示变量名有误 设置全局变量 设置列表变量 设置字段变量 关键字书写格式问题

  4. Android开发Settings源码分析之主界面加载(二)

    现在都说互联网寒冬,其实只要自身技术能力够强,咱们就不怕!我这边专门针对Android开发工程师整理了一套[Android进阶学习视频].[全套Android面试秘籍].[Android知识点PDF] ...

  5. 网页添加 Live2D 看板娘

        我是先参考别人的[点击跳转]博客来做的.不过我发现网上很多人都没有把一些细节写出来,用了别人那里下载的文件后里面的一些跳转链接就跳到他们的页面了.所以我这里写一写如何修改这些跳转链接吧. 1. ...

  6. 扫描仪扫描文件处理-A4分辨率

    转换公式:毫米转英寸,英寸乘以DPI(每英寸点数) 1英寸 = 2.54 厘米 = 25.4 毫米 例子(600dpi):mm: 210x297 = px: 4961(210/25.4*600)x70 ...

  7. linux查看登录用户

    [root@localhost ~]# w 11:01:06 up 3 days, 12:40, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FRO ...

  8. swoole创建进程

    <?php /** * Created by PhpStorm. * User: mac * Date: 2020/4/23 * Time: 21:57 */ use Swoole\Proces ...

  9. windows搭建SVN服务

    下载`TortoiseSVN 官网下载址:https://www.visualsvn.com/visualsvn/download/tortoisesvn/ 根据自己系统环境选择 安装Tortoise ...

  10. Python可迭代对象和迭代器对象

    可迭代对象iterable: 对象字面意思:Python中一切皆对象.一个实实在在存在的值. 可迭代:更新迭代.迭代是一个重复的过程,每次重复是基于上一次的结果而继续的,每次都有新的内容. 可迭代对象 ...