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,给个默认值

  • 相关阅读:
    Java实现 LeetCode 617 合并二叉树(遍历树)
    Java实现 LeetCode 611 有效三角形的个数(双指针)
    Java实现 LeetCode 611 有效三角形的个数(双指针)
    Java实现 LeetCode 611 有效三角形的个数(双指针)
    Java实现 LeetCode 609 在系统中查找重复文件(阅读理解+暴力大法)
    Java实现 LeetCode 609 在系统中查找重复文件(阅读理解+暴力大法)
    PHP mb_substr() 函数
    PHP substr() 函数
    PHP strtr() 函数
    PHP strtoupper() 函数
  • 原文地址:https://www.cnblogs.com/biao/p/11764981.html
Copyright © 2011-2022 走看看