MySQL 8.4 Release Notes
5.3.4.6 使用 NULL 值
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
表示假,而任何其他值都表示真。boolean 操作的默认真值是 1
。
NULL 值的特殊处理是为什么,在前一节中,需要使用 death IS NOT NULL
而不是 death <> NULL
来确定哪些动物已经死亡。
两个 NULL 值在 GROUP BY
中被视为相等。
在执行 ORDER BY
时,NULL 值在 ORDER BY ... ASC
中被显示在前,而在 ORDER BY ... DESC
中被显示在最后。
在工作中使用 NULL 值时的一个常见错误是假设不能将零或空字符串插入一个定义为 NOT NULL
的列中,但实际上这是可能的。这些值实际上是 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 值的问题”。