zoukankan      html  css  js  c++  java
  • MySQL 下 NULL值的意义

      今天遇到一个“有趣”的问题,是关于NULL值的一种现象:

    CREATE TABLE `au` (
    `id` int(11) DEFAULT NULL,
    `name` varchar(10) DEFAULT NULL,
    UNIQUE KEY `name` (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    root@localhost : test 04:41:30>select * from au ;
    +------+------+
    | id | name |
    +------+------+
    | 1 | NULL |
    | 2 | NULL |
    | 3 | NULL |
    +------+------+
    3 rows in set (0.00 sec)
    
    root@localhost : test 04:41:36>select * from au where name is NULl;
    +------+------+
    | id | name |
    +------+------+
    | 1 | NULL |
    | 2 | NULL |
    | 3 | NULL |
    +------+------+
    3 rows in set (0.00 sec)

    name字段上有唯一索引,允许为NULL的,说明各个NULL值在内部是不一样的。但是为什么select 出来的结果却全部显示,这个里面有什么“秘密”吗?
    这个问题咨询了好友@zuoxingyu,还是不明白;也有说 unique key不判断null的情况,要设定为not null。对这个还是不理解,既然建表的时候都可以把NULL值带进去,为什么非要设置
    为NOT NULL呢?并且NULL值更省空间

    最后发现,其实挺简单的,因为NULL只是一个标识,只要知道此列为NULL即可,NULL值跟任何值比较,返回均为不相同,包括NULL与NULL本身。

    验证:

    root@localhost : test 05:25:10>select NULL is NULL,NULL=NULL;
    +--------------+-----------+
    | NULL is NULL | NULL=NULL |
    +--------------+-----------+
    |            1 |      NULL |
    +--------------+-----------+

    例子中的au表,之所以唯一索引能存NULL值,是因为各个NULL值都是不相同的;而is null 返回结果,证明他们都属于NULL

    ~~~~~~~~~~~~~~~ 万物之中,希望至美 ~~~~~~~~~~~~~~~
  • 相关阅读:
    Python 模块 itertools
    Python 字符串的encode与decode
    python 模块 hashlib(提供多个不同的加密算法)
    暴力尝试安卓gesture.key
    hdu 1300 Pearls(DP)
    hdu 1232 畅通工程(并查集)
    hdu 1856 More is better(并查集)
    hdu 1198 Farm Irrigation(并查集)
    hdu 3635 Dragon Balls(并查集)
    hdu 3038 How Many Answers Are Wrong(并查集)
  • 原文地址:https://www.cnblogs.com/zhoujinyi/p/2727049.html
Copyright © 2011-2022 走看看