Skip to content

Latest commit

 

History

History
47 lines (34 loc) · 2.07 KB

File metadata and controls

47 lines (34 loc) · 2.07 KB

4.3.4.6 Working with NULL Values

从概念上讲,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表示false,任何其他值都表示真。布尔运算的真值默认为1。

这也是在前面的部分,在确定哪些动物不再活着使用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列,因为这些实际上是NULL。请参见第B.5.4.3节“空值问题”。