为什么不建议给MySQL设置Null值?( 二 )


这跟我们的预期结果不大一致,预期是想返回id2~10的数据
当然,这个问题也不是无解,MySQL同样也提供了方法
要解决这个问题,只能再加一个条件就是把字段值为null的再单独处理一下

为什么不建议给MySQL设置Null值?

文章插图
 
isnull
四、空指针问题如果一个列存在null值,使用MySQL的聚合函数后返回结果是null,而并非是0,就会造成程序执行时的指针异常
CREATE TABLE user_order ( id INT PRIMARY KEY auto_increment, num int) ENGINE='innodb';insert into user_order(num) values(3),(6),(6),(NULL);创建用户订单数量表,并插入4条数据,接下来演示一下产生的问题
select sum(num) from goods where id>4;
为什么不建议给MySQL设置Null值?

文章插图
 
聚合函数产生的问题
可以看到当字段为null时,使用聚合函数返回值就是null,并非是0,那么这个问题要怎么处理呢?
同样MySQL也给大家提供了对应函数,就是ifnull
select ifnull(sum(num), 0) from goods where id>4;
为什么不建议给MySQL设置Null值?

文章插图
 
在这里插入图片描述
五、这是在难为谁?当一个字段的值存在null值,若要进行null值查询时,必须要使用isnull或者ifnull进行匹配查询,又或者使用is null,is not null 。
而常用的表达式就不能再进行使用了,有工作经验的还好的,要是新人的话会很难受 。
接下来看几个新人经常犯的错误
错误一
对存在null值的字段使用表达式进行过滤,正确用法应该是is null 或者 is not null
select * from user where name<>null;
为什么不建议给MySQL设置Null值?

文章插图
 
在这里插入图片描述
错误二
依然是使用表达式,同样可以使用isnull
为什么不建议给MySQL设置Null值?

文章插图
 
在这里插入图片描述
六、总结说了这么多也都感觉到了字段设置为null的麻烦之处,不过幸好的是MySQL对使用is null、isnull()等依然可以使用上索引 。
咔咔目前所在的公司存在大量字段默认值就是null,于是代码中就大量存储ifnull、is null、is not null等代码 。
一般字段数值类型的默认值就给成0,字符串的给个空也行,千万不要给null了哈!
文章来自
https://www.cnblogs.com/fkaka/p/16227471.html




推荐阅读