MySQL系列关于NUll值的经验总结分析教程

 更新时间:2021年10月26日 11:57:44   作者:数据分析与统计学之美  
这篇文章主要为大家介绍了MySQL系列关于NUll值的一些经验总结分析,关于null值的影响作用以及为什么会出现null值的原因等等问题的解析

1.测试数据

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);

结果如下:

在这里插入图片描述

2.null值带给我们的不便影响

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

结果如下:

在这里插入图片描述

3.空格、空值和null,我们应该怎么判断呢?

1)空格、空值和null的区别

用一个形象的比喻来说明这三者的区别。首先空格很好理解,一个空字符串吗,占据一定的空间大小。不好理解的其实是空值和null,空值相当于一个杯子是真空状态的,什么也没有,null表示的杯子中有空气。

MySQL中,null是未知的,且占用空间的。null使得索引、索引统计和值都更加复杂,并且影响优化器的判断。空值('')是不占用空间的,注意空值的''之间是没有空格的。在进行count()统计某一列记录数的时候,如果存在null值,会被系统自动忽略掉,但是空值会被统计到其中。判断null使用的是is nullis not null,但判断空字符使用的是= ,!=, <>来进行处理。对于timestamp数据类型,如果插入null值,则出现的值是当前系统时间。插入空值,则会出现0000-00-00 00:00:00。对于已经创建好的表,普通的列将null修改为not null带来的性能提升较小,所以调优时候没有比要注意。

2)出现了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值的资料请关注脚本之家其它相关文章!

相关文章

  • mysql特殊语法insert into .. on duplicate key update ..使用方法详析

    mysql特殊语法insert into .. on duplicate key update ..使用方

    在我们的日常开发中经常会遇到过这样的情景,查看某条记录是否存在,不存在的话创建一条新记录,存在的话更新某些字段,下面这篇文章主要给大家介绍了关于mysql特殊语法insert into .. on duplicate key update ..使用方法的相关资料,需要的朋友可以参考下
    2023-04-04
  • 当mysqlbinlog版本与mysql不一致时可能导致出哪些问题

    当mysqlbinlog版本与mysql不一致时可能导致出哪些问题

    这篇文章主要介绍了当mysql服务器为mysql5.6时,mysqlbinlog版本不对可能导致出哪些问题,下面通过模拟2种场景分析此类问题,需要的朋友可以参考下
    2015-07-07
  • MySQL数据库学习之分组函数详解

    MySQL数据库学习之分组函数详解

    这篇文章主要为大家详细介绍一下MySQL数据库中分组函数的使用,文中的示例代码讲解详细,对我们学习MySQL有一定帮助,需要的可以参考一下
    2022-07-07
  • MySQL无法启动1067错误的又一种解决方法(机房断电)

    MySQL无法启动1067错误的又一种解决方法(机房断电)

    今早在对一张table 创建primay key过程中发生了断电,当电脑再次启动时候,发现mysql 服务无法启动,使用 net start 提示 1067错误,折腾了2个小时无法解决,后来只能通过手工删除数据文件,日志文件,再启动服务,然后导入数据来完成
    2013-01-01
  • Mysql+Navicat16长期免费直连数据库安装使用超详细教程

    Mysql+Navicat16长期免费直连数据库安装使用超详细教程

    这篇文章主要介绍了Mysql+Navicat16长期免费直连数据库安装教程,这里下载的是mysql8版本,第一个安装包比较小, 第二个安装包比较大, 因为包含调试工具,我这里下载的是第一个,详细介绍跟随小编一起看看吧
    2023-11-11
  • mysql保存微信昵称特殊字符的方法

    mysql保存微信昵称特殊字符的方法

    我在用mysql 保存微信昵称,当插入昵称数据的时候,报错。接下来通过本文给大家介绍mysql保存微信昵称特殊字符的方法,需要的朋友一起看看吧
    2018-06-06
  • 防止web项目中的SQL注入

    防止web项目中的SQL注入

    这篇文章介绍了防止web项目中的SQL注入,小编觉得挺不错的,现在分享给大家,也给大家做个参考。需要的朋友可以收藏下,方便下次浏览观看
    2021-12-12
  • MySQL深分页问题解决的实战记录

    MySQL深分页问题解决的实战记录

    优化项目代码过程中发现一个千万级数据深分页问题,觉着有必要给大家总结整理下,这篇文章主要给大家介绍了关于解决MySQL深分页问题的相关资料,需要的朋友可以参考下
    2021-09-09
  • mysql8.0.19忘记密码的完美解决方法

    mysql8.0.19忘记密码的完美解决方法

    这篇文章主要介绍了mysql8.0.19忘记密码的完美解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • MySQL kill不掉线程的原因

    MySQL kill不掉线程的原因

    这篇文章主要介绍了MySQL kill不掉线程的原因,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-05-05

最新评论