MySQL 9.0 发行说明
NULL
值可能会让人感到意外,直到您习惯它为止。从概念上讲,NULL
表示 “缺少的未知值”,并且它的处理方式与其他值略有不同。
要测试 NULL
,请使用 IS NULL
和 IS NOT NULL
运算符,如下所示
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
您不能使用算术比较运算符(如 =
、<
或 <>
)来测试 NULL
。要亲自证明这一点,请尝试以下查询
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
因为任何与 NULL
的算术比较结果也是 NULL
,所以您无法从这些比较中获得任何有意义的结果。
在 MySQL 中,0
或 NULL
表示假,而其他任何值都表示真。布尔运算的默认真值为 1
。
NULL
的这种特殊处理方式解释了为什么在上一节中,有必要使用 death IS NOT NULL
而不是 death <> NULL
来确定哪些动物不再存活。
在 GROUP BY
中,两个 NULL
值被视为相等。
执行 ORDER BY
时,如果执行 ORDER BY ... ASC
,则 NULL
值会首先出现;如果执行 ORDER BY ... DESC
,则 NULL
值会最后出现。
使用 NULL
时的一个常见错误是假设不可能将零或空字符串插入定义为 NOT NULL
的列中,但事实并非如此。这些实际上是值,而 NULL
表示 “没有值。” 您可以使用 IS [NOT] NULL
轻松地对此进行测试,如下所示
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
因此,将零或空字符串插入 NOT NULL
列是完全可能的,因为它们实际上是 NOT NULL
。请参阅第 B.3.4.3 节 “NULL 值问题”。