这篇文章主要讲解了“MySQL系列如何理解关于NUll值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL系列如何理解关于NUll值”吧!
1.测试数据
2.null值带给我们的不便影响
3.空格、空值和null,我们应该怎么判断呢?
1)空格、空值和null的区别
2)出现了null值,我应该怎么办?
create table test_null ( id int, name varchar(20), chinese int, math int, english int ) charset=utf8; insert into test_null values (1,null,80,70,68), (2,'张三',60,null,null), (3,'李四',null,90,80), (4,'王五',90,60,75), (5,null,null,50,95);
结果如下:
1)过滤有所不同,只能使用is null或者is not null;
# null值不能使用 == 或 != 来比较 # 下面两种用法都是错误的 select * from test_null where name == null; select * from test_null where name != null; # null值一般使用 is null 或 is not null 来比较 # 下面两种用法才是正确的 select * from test_null where name is null; select * from test_null where name is not null;
2)出现null值,会导致+ - * /运算失效;
select *,(chinese+math+english) as 总分 from test_null;
结果如下:
3)null值对聚合函数无影响,聚合函数会直接忽略null值;
select sum(chinese) 语文总分, sum(math) 数学总分, sum(english) 外语总分 from test_null
结果如下:
用一个形象的比喻来说明这三者的区别。首先空格很好理解,一个空字符串吗,占据一定的空间大小。不好理解的其实是空值和null,空值相当于一个杯子是真空状态的,什么也没有,null表示的杯子中有空气。
MySQL中,null
是未知的,且占用空间的。null使得索引、索引统计和值都更加复杂,并且影响优化器的判断。空值('')
是不占用空间的,注意空值的''之间是没有空格的。在进行count()
统计某一列记录数的时候,如果存在null
值,会被系统自动忽略掉,但是空值会被统计到其中。判断null使用的是is null
和 is not null
,但判断空字符使用的是= ,!=, <>
来进行处理。对于timestamp
数据类型,如果插入null值
,则出现的值是当前系统时间。插入空值,则会出现0000-00-00 00:00:00
。对于已经创建好的表,普通的列将null
修改为not null
带来的性能提升较小,所以调优时候没有比要注意。
通过上面的分析我们已经知道了,当表中存在null值,会导致加、减、乘、除运算失效。那么我们怎么处理这些null值比较好呢?
第一种方式:直接使用is not null将这些null值过滤掉,但是这样会将其它非缺失值的字段过滤掉,造成数据的浪费。
第二种方式:也是我们推荐的方式,我们使用函数进行缺失值的填充。
ifnull()和coalesce()函数的使用:
select id, coalesce(name,'无名氏') name, coalesce(chinese,0) chinese, ifnull(math,0) math, ifnull(english,0) english from test_null;
结果如下:
感谢各位的阅读,以上就是“MySQL系列如何理解关于NUll值”的内容了,经过本文的学习后,相信大家对MySQL系列如何理解关于NUll值这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。