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

字段特殊属性相关:设置为非NULL

原创 小气鬼 2022-07-08
474

NULL值在一些语句中的使用

    以INT列为例,对一个允许为NULL的字段进行min,max,sum,加减,order by ,group by,distinct等操作的时候。如果默认不是0,操作将会很明确,如果使用NULL,需要清楚的知晓如下规则:

        1) NULL值在min/max/sum中会被直接忽略掉

        2) 对NULL值进行加减,如SET a=a+1,其结果仍旧是NULL

        3) order by字段的时候NULL会排在最前面(以升序,如果是倒序则相反)

        4) group by/distinct时,NULL值被视为相同的值

        5) 如果在字段插入一个NULL及非INT类型的值,这个字段的值将变成0。

         在字符列中

        1) 如果字段是字符,目测字段值,你无法区分这个值到底是NULL还是字符串’NULL’

        2) 当企图统计title的值小于1000的总行数时,你会发现,NULL值不包括在里面。

        3) 同理,如果你用length去统计一个VARCHAR的长度时,NULL返回的将不是数字。


不使用DEFALUT NULL的原因

      NULL本身是一个特殊的值,MySQL采用特殊的办法来处理NULL,针对默认NULL的字段的查询、赋值存在着各种各样的与此相对应的情况需要去关心。它既不是数字,也不是字符。你必须使用IS NULL/IS NOT NULL这种与普通SQL大相径庭语句去查询,使用INSERT(‘a’,NULL,’b’)去插入,却又使用SET 字段=NULL去变更。

      在存储上,它通过进制转换结合表字段属性来确认哪些字段的值是NULL,MySQL不得不额外每次走到这个分支上去确定字段的值,而不是像普通的INT,VARCHAR等。存储上前面统一放长度,后面放数据。在NULL上的各种查询可能会并不合你的本意。

      所以,尽管它有些时候可能会比空值节省空间,在索引上也不比空值差,但是为了避免在其身上各种特殊性导致的问题,我们舍弃掉了NULL。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论