Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


5.3.4.6 使用 NULL 值

NULL 值可以让人感到惊讶,直到你习惯了它。概念上,NULL 值表示一个缺失的未知值,并且它被处理得不同于其他值。

要测试 NULL 值,请使用IS NULLIS 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 中,0NULL表示假,而任何其他值都表示真。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 值的问题”