一文带你探究MySQL中的NULL


Posted in MySQL onNovember 11, 2021

前言

不知道大家有没有遇到这样的问题,当我们在对MySQL数据库进行查询操作时,条件写的是status!=1,理论上会将所有不符合条件的查询出来,但奇怪的是结果为NULL的就查不出来,必须得拼接上条件or status IS NULL。本篇文章我们就一起探究一下MySQL中的NULL。

1 MySQL 中的NULL

对MySQL来说,NULL是一个特殊的值。

NULL表示不可知不确定,NULL不与任何值相等(包括其本身)

2 NULL占用的长度

NULL在数据库中占用的长度

mysql>  select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') |
+--------------+------------+-------------+
| NULL         |          0 |           1 |
+--------------+------------+-------------+

NULL columns require additional space in the row to record whether their values are NULL.

可以看出空值''的长度是0,是不占用空间的;而的NULL长度是NULL,是需要占用额外空间的,所以在一些开发规范中,建议将数据库字段设置为Not NULL,并且设置默认值''或0。

3 对NULL值的比较

IS NULL 判断某个字符是否为空,并不代表空字符或者是0

SQL92标准中说道,!=NULL 条件判断永远返回false,聚合运算永远返回0

当然在数据库中可以使用SET ANSI_NULLS OFF关闭标准模式,但一般不建议这样去做

所以,要判断一个数是否等于NULL只能用 IS NULL 或者 IS NOT NULL 来判断

4 SQL对NULL值进行处理

MySQL中专门为我们提供了IFNULL(expr1,expr2)这个函数,让我们可以轻松的处理数据中的NULL

IFNULL有两个参数。 如果第一个参数字段不是NULL,则返回第一个字段的值。 否则,IFNULL函数返回第二个参数的值(默认值)。

select IFNULL(status,0) From t_user;

5 值为NULL 对查询条件的影响

  • 不能使用=,<,>这样的运算符,对NULL做算术运算的结果都是NULL(所以说当status为NULL时,status!=1不会统计到NULL)
  • 使用COUNT(expr) 统计时,也不会统计该字段为NULL的数据

6 值为NULL对索引的影响

首先需要注意的一点是,MySQL中某一列数据含有NULL,并不一定会造成索引失效。

MySQL可以在含有NULL的列上使用索引

在有NULL值得字段上使用常用的索引,如普通索引、复合索引、全文索引等不会使索引失效。但是在使用空间索引的情况下,该列就必须为 NOT NULL。

7 值为NULL对排序的影响

在ORDER BY排序的时候,如果存在NULL值,那么NULL是最小的,ASC正序排序的话,NULL值是在最前面的

如果我们需要在正序排序时,将NULL值放在后边,这里我们就需要巧借IS NULL

select * from t_user order by age is null, age; 
或者
select * from t_user order by isnull(name), age; 
# 等价于
select * from (select name, age, (age is null) as isnull from t_user) as foo order by isnull, age;

8 NULL和空值区别

NULL也就是在字段中存储NULL值,空值也就是字段中存储空字符('')。

1、占用空间区别

mysql>  select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') |
+--------------+------------+-------------+
| NULL         |          0 |           1 |
+--------------+------------+-------------+
1 row in set

小总结:从上面看出空值('')的长度是0,是不占用空间的;而的NULL长度是NULL,其实它是占用空间的,看下面说明。

NULL columns require additional space in the row to record whether their values are NULL.

NULL列需要行中的额外空间来记录它们的值是否为NULL。

通俗的讲:空值就像是一个真空转态杯子,什么都没有,而NULL值就是一个装满空气的杯子,虽然看起来都是一样的,但是有着本质的区别。

总结

到此这篇关于MySQL中NULL的文章就介绍到这了,更多相关MySQL中的NULL内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL索引篇之千万级数据实战测试
Apr 05 MySQL
MySQL分库分表与分区的入门指南
Apr 22 MySQL
MySQL下使用Inplace和Online方式创建索引的教程
May 26 MySQL
MySQL CHAR和VARCHAR该如何选择
May 31 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
WINDOWS下安装mysql 8.x 的方法图文教程
Apr 19 MySQL
使用Mysql计算地址的经纬度距离和实时位置信息
Apr 29 MySQL
MySQL约束(创建表时的各种条件说明)
Jun 21 MySQL
MySQL生成千万测试数据以及遇到的问题
Aug 05 MySQL
mysql函数全面总结
Nov 11 #MySQL
MYSQL 运算符总结
Nov 11 #MySQL
MySQL 数据类型详情
Nov 11 #MySQL
MYSQL 表的全面总结
Nov 11 #MySQL
MySQL 服务和数据库管理
面试被问select......for update会锁表还是锁行
mysql的数据压缩性能对比详情
Nov 07 #MySQL
You might like
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
Javascript的this详解
2019/03/23 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
跟老齐学Python之有点简约的元组
2014/09/24 Python
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
Django框架视图函数设计示例
2019/07/29 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
编写python代码实现简单抽奖器
2020/10/20 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
圣诞节开幕词
2015/01/29 职场文书
投资合作意向书范本
2015/05/08 职场文书
海洋天堂观后感
2015/06/05 职场文书
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫