使用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
表示false,其他表示true。布尔运算的默认真值是1
。
特殊处理NULL
是为什么在上一节中有必要使用death IS NOT NULL
来代替确定哪些动物不再存活death <> NULL
。
在中,两个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
。