暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL NULL值是怎样的存在?

IT的世界 2024-08-01
42

NULL概念

公司的DBA强制规定在创建表时,表中所有的字段必须都是NOT NULL,并根据业务需要给出默认值。
这个规定起初让开发人员有点难受,针对部分业务场景下的字段需要额外多做判断,但是慢慢的大家也适应了。
那么MySQL中NULL值是怎样的存在,要特殊对待呢?
很多人将NULL值类比为空字符串'',其实两者是完全不同的两个概念。
  • • NULL值,表示未知的状态

  • • 空字符'',表示一个确定的状态,是一个长度为0的字符串

  • • 例如student的name字段如果为NULL,表明当前id下我们不知道名字。

  • • 如果name=='',表明我们知道当前id下没有名字。

NULL操作

上图中与NULL值进行的比较操作,包含NULL值的函数操作都返回NULL,即都为不确定,不为真。
那么在我们日常的SQL中就不能将这些操作应用到NULL上。例如,我们要查找课程号为NULL的数据:
使用select * from student where classId = NULL;
是查不到数据的。
因为classId = NULL
返回的NULL,where 语句只有返回true才会返回符合条件的数据。
  • • MySQL提供了 IS NULL
    IS NOT NULL
    两个运算符和IFNULL()
    函数来帮助处理NULL。

  • • 当字段中存在NULL值时,使用一些聚合函数
    需要注意,例如COUNT()、MIN()、SUM()会忽略NULL值

    student表中的数据总条数为7,但是count(classId)忽略掉了NULL值。

  • • 当使用DISTINCT、GROUP BY或 时ORDER BY,所有 NULL值都被视为相等

  • • 当使用时ORDER BY
    , NULL值会首先显示,如果指定DESC按降序排序,则值会最后显示。

  • • NULL对使用索引查询效率的影响
    :因为NULL值未知,无法使用比较操作,可能导致索引无法过滤数据,而查询最后不走索引。
    在查询中使用IS NULL 或者 IS NOT NULL作为查询条件
    ,可以让索引得到利用。例如:
    select * from student where classId = 102
    变成select * from student where classId is not null and classId = 102
    ;

  • • 在MySQL中的记录结构
    中,会使用额外空间
    存储那些可能为NULL值的字段,因此带来空间上的开销。

NULL值在MySQL中的特殊性,需要开发人员在了解其特性的情况下正确使用
,避免调入NULL值的陷阱,导致不必要的错误。
为此DBA直接强制字段NOT NULL,保持一致的表结构设计规则。

既然已经看到这里,请随手点个赞和“在看”吧。

欢迎关注我的公众号“IT的世界”,原创技术文章第一时间推送。


文章转载自IT的世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论