zoukankan      html  css  js  c++  java
  • 十三、细说NULL导致的神坑,让人防不胜防

    当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免?

    一、比较运算符中使用NULL

      任何值和NULL使用运算符(>、<、>=、<=、!=、<>)或者(in、not in、any/some、all)比较时,返回值都为NULL,NULL作为布尔值的时候,不为1也不为0。

    二、IN、NOT IN和NULL比较  

      IN和NULL比较:  当IN和NULL比较时,无法查询出为NULL的记录。

      NOT IN 和NULL比较:  当NOT IN 后面有NULL值时,不论什么情况下,整个sql的查询结果都为空。  

    三、EXISTS、NOT EXISTS和NULL比较

      =不能比较NULL

    四、判断NULL只能用IS NULL、IS NOT NULL

      判断是否为空只能用IS NULL、IS NOT NULL。

    五、聚合函数中NULL的坑  

      count(a)返回了2行记录,a字段为NULL的没有统计出来。

      count(b)返回了1行记录,为NULL的2行记录没有统计出来。

      count(*)可以统计所有数据,不论字段的数据是否为NULL。

      select count(a) from test1 where a is null; --返回为0,说明如下:

        count(字段)无法统计字段为NULL的值,count(*)可以统计值为null的行。

    六、NULL不能作为主键的值  

      结论:当字段为主键的时候,字段会自动设置为not null。

      看了上面这些还是比较晕,NULL的情况确实比较难以处理,容易出错,最有效的方法就是避免使用NULL。所以,强烈建议创建字段的时候字段不允许为NULL,设置一个默认值。

    七、总结

    • NULL作为布尔值的时候,不为1也不为0

    • 任何值和NULL使用运算符(>、<、>=、<=、!=、<>)或者(in、not in、any/some、all),返回值都为NULL

    • 当IN和NULL比较时,无法查询出为NULL的记录

    • 当NOT IN 后面有NULL值时,不论什么情况下,整个sql的查询结果都为空

    • 判断是否为空只能用IS NULL、IS NOT NULL

    • count(字段)无法统计字段为NULL的值,count(*)可以统计值为null的行

    • 当字段为主键的时候,字段会自动设置为not null

    • NULL导致的坑让人防不胜防,强烈建议创建字段的时候字段不允许为NULL,给个默认值

  • 相关阅读:
    (zhuan) Paper Collection of Multi-Agent Reinforcement Learning (MARL)
    SalGAN: Visual saliency prediction with generative adversarial networks
    百善孝为先
    现代人为这个世界留下了什么?
    如人饮水,冷暖自知。
    移动端tap与click的区别 && 点透事件
    渐进增强与优雅降级 && css3中普通属性和前缀属性的书写顺序
    JavaScript中的垃圾回收机制与内存泄露
    http2.0之头部压缩
    状态码301和302的区别
  • 原文地址:https://www.cnblogs.com/biao/p/11764981.html
Copyright © 2011-2022 走看看