NULL
在您习惯之前,
该值可能会令人惊讶。从概念上讲,NULL
意味着
“缺失的未知值”,它的处理方式与其他值有所不同。
要测试NULL
,请使用
IS NULL
andIS
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
orNULL
表示 false,其他任何表示 true。布尔运算的默认真值是1
。
的这种特殊处理是为什么在上一节中有必要使用而不是NULL
来确定哪些动物不再活着。
death IS NOT
NULL
death <>
NULL
a 中的两个NULL
值被视为相等
GROUP BY
。
执行 时,如果执行ORDER BY
则
NULL
首先显示值,执行则
ORDER BY ... ASC
最后
显示值ORDER BY ... DESC
。
使用时的一个常见错误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 值的问题”。