一文带你探究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新手入门的基本操作汇总
May 13 MySQL
zabbix监控mysql的实例方法
Jun 02 MySQL
SQL实现LeetCode(177.第N高薪水)
Aug 04 MySQL
Mysql排序的特性详情
Nov 01 MySQL
分享mysql的current_timestamp小坑及解决
Nov 27 MySQL
mysql5.6主从搭建以及不同步问题详解
Dec 04 MySQL
mysql中数据库覆盖导入的几种方式总结
Mar 25 MySQL
MySQL Server层四个日志的实现
Mar 31 MySQL
MySQL创建管理子分区
Apr 13 MySQL
Mysql索引失效 数据库表中有索引还是查询很慢
May 15 MySQL
MySQL控制流函数(-if ,elseif,else,case...when)
Jul 07 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
Dec 24 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
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
PHP反射学习入门示例
2019/06/14 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
用JS控制回车事件的代码
2011/02/20 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
python读取oracle函数返回值
2016/07/18 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
python实现简易版计算器
2020/06/22 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
Python global全局变量函数详解
2018/09/18 Python
解决Python对齐文本字符串问题
2019/08/28 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
教育局长自荐信范文
2013/12/22 职场文书
大学生实习证明范本
2014/09/19 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
品德与社会教学反思
2016/02/24 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP