• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • NULL值问题

    NULL对于SQL的新手来说,值的概念是一个常见的混淆源,他们经常认为这NULL与空字符串是同一回事''。不是这种情况。例如,以下语句完全不同:

    mysql> INSERT INTO my_table (phone) VALUES (NULL);
    mysql> INSERT INTO my_table (phone) VALUES ('');
    

    这两个语句都会在该phone列中插入一个值,但是第一个语句将插入一个NULL值,第二个语句将插入一个空字符串。第一个的含义可以视为“未知电话号码”,第二个的含义可以视为“已知该人没有电话,因此也没有电话号码”。”

    为了帮助NULL处理,可以使用IS NULLIS NOT NULL运算符以及IFNULL()函数。

    在SQL中,与NULL其他任何值(甚至)相比,该值永远不会为真NULL。除非文档中针对表达式中涉及的运算符和函数另有说明,否则包含的表达式NULL始终会产生一个NULL值。以下示例中的所有列均返回NULL

    mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);
    

    要搜索为的列值NULL,您不能使用expr = NULL测试。以下语句不返回任何行,因为expr = NULL对于任何表达式都不是真的:

    mysql> SELECT * FROM my_table WHERE phone = NULL;
    

    要查找NULL值,必须使用IS NULL测试。以下语句显示如何查找NULL电话号码和空电话号码:

    mysql> SELECT * FROM my_table WHERE phone IS NULL;
    mysql> SELECT * FROM my_table WHERE phone = '';
    

    有关更多信息和示例,请参见“使用NULL值”。

    您可以在可以有一列中添加索引NULL,如果您使用的值MyISAMInnoDBMEMORY存储引擎。否则,必须声明一个索引列NOT NULL,并且不能插入NULL该列。

    使用读取数据时LOAD DATA,空白列或缺失列将使用更新''。要将NULL值加载到列中,请\N在数据文件中使用。NULL在某些情况下,也可以使用原义词。请参见“ LOAD DATA语句”。

    使用DISTINCTGROUP BY或时ORDER BY,所有NULL值均视为相等。

    使用时ORDER BYNULL值首先显示,如果您指定DESC按降序排序,则最后显示。

    集合体(摘要)功能,例如COUNT()MIN(),和SUM()忽略NULL的值。例外是COUNT(*),它计算行而不是单个列的值。例如,以下语句产生两个计数。第一个是对表中行数的计数,第二个是NULLage列中非值数的计数:

    mysql> SELECT COUNT(*), COUNT(age) FROM person;
    

    对于某些数据类型,MySQL NULL专门处理值。如果插入NULL到一个TIMESTAMP列,当前日期和时间插入。如果您插入NULL具有AUTO_INCREMENT属性的整数或浮点列,则将插入序列中的下一个数字。