当MySQL 字段为 NULL时,查询结果可能出错

  1. count(*)count(列名)意义不同
    count(*) 会统计某列为 NULL 的行,而 count(列名) 不会统计此列为 NULL 的行
  2. count(distinct column1,column2)
    当使用语句count(distinct column1,column2)时,如果有一个字段值为空,即使另一字段有不同的值,那么查询的结果也不会统计这一行
    例如:id 为主键,activity_configure_json允许null
select distinct id , activity_configure_json from yc_activity  -- 195行

select count(distinct id , activity_configure_json) from yc_activity  -- 49
  1. <>或者!=
    某列存在 NULL 值时,如果执行非等于查询(<>或者!=)会导致为 NULL 值的结果丢失
    正确写法:
select * from yc_activity where activity_configure_json != 'java' or isnull(activity_configure_json)
  1. 求和函数或者平均值之类的函数
    当查询不到数据时,求和函数或者平均值之类的函数返回null而非0,java代码可能空指针异常
    推荐写法:
select ifnull(sum(num),0) from yc_activity where activity_configure_json = 'css' 

PS:
1.推荐使用isnull(cloumn)来判断 NULL 值,相比is null ,可读性更好,执行效率也更快一些
2.设计表,可以设置空值(‘’)或 0 作为其默认值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值