数据库版本MySQL8。
1.count 函数 觉得 NULL值 不算数 ,所以开发中要避免count的时候丢失数据。
如图所示,以下有7条记录,但是count(name)却只有6条。
为什么丢失数据?因为MySQL的count函数觉得 Null值不算数,就是说Mysql不把NULL数据当成一个数。
2.distinct 数据丢失
当使用 count(distict col1,col2)查询时,如果其中一个列为Null,那么即使另一个列有不同的值,那么查询的结果也会将数据丢失,如下SQL所示:
select count (distinct name,mobile) from person;
3.select 数据丢失。
如果某列存在NULL值,如果执行不等于查询(<> or != )会导致为NULL值的结果丢失。比如以下这个数据:
select * from person where name != 'Java' order by id;
按理说NULL 也不等于Java对吧,按理要能查出来,结果查不出来。
4.导致空指针异常。
如果某列存在NULL值,可能会导致sum(column)的返回结果为NULL而非0,如果sum查询的结果为NULL,就可能会导致程序执行时空指针异常NullPointerException。
可以使用 ifnull函数来避免空指针异常。
select ifnull(sum(num),0) from goods where id >4;
5.增加了查询难度。
当某列值中有NULL值的时候,在进行NULL值或者非NULL值得查询难度就增加了。所谓得查询难度增加指的是当进行NULL值查询时,必须使用NULL值匹配的查询方法,比如 IS NULL 或者 IS NOT NULL ,又或者是 IFNULL(column) 这样的表达式进行查询,而非传统的 =,!= ,<>...等这些表达式就不能使用了,这就增加了查询的难度,尤其对新手来说。
select * from person where name != null;
不能用不等于,而应该用is not null.
扩展总结:列中有NULL 不会影响索引,但是不建议列中有NULL,给与一个默认值,比如一个空字符串或者0等。