Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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 表示 false,其他任何值表示 true。布尔操作的默认真值为 1

这就是为什么在前一节中,我们需要使用 death IS NOT NULL 而不是 death <> NULL,来确定哪些动物不再活着。

两个 NULL 值在 GROUP BY 中被视为相等。

在执行 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 值的问题”