1.数据丢失
当某列存在null时,再使用count(name) 查询该列,会丢失值为null的数据,使用count(*) 则不会
distinct数据丢失
select count(distinct name,mobile) from persion. 如果其中一列为null,即使另外一列有不同的值,那么查询的也会丢失数据select数据丢失
如果某列存在null值,如果执行不等于查询(<> / !=) 会导致为null值的结果丢失
优化: selct * from person where name <> ‘java’ or isnull(name) order by id;
- 导致空指针异常- 如果某列存在null值,可能会导致sum(column)的返回结果为NULL而非0,如果sum的结果为NULL,可能会引起程序的报错(空指针 NPE)
优化: select ifnull(sum(num),0) from goods where id > 4;
5.增加了查询难度
当某列值中有NULL值时,在进行NULL值 或者 非NULL值的查询难度就增加了
即:当进行NULL值查询时,必须使用NULL值匹配的查询方法,IS NULL 或者 IS NOT NULL 又或者 IFNULL(column) ,而传统的 =、!=、<>…等这些表达式就不能使用了
ps: NULL不会影响索引
省流:建表每个字段都给默认值,数据表中不要出现null