MySQL NULL--三值逻辑(Three Value Logic)
时间:2022-03-15 15:13
三值逻辑(Three Value Logic)
在关系型数据库中,由于NULL值的存在,导致逻辑表达式存在三种值:TRUE/FALSE/UNKNOW。
SELECT ‘999‘=NULL AS C1, ‘999‘=‘111‘ AS C2, ‘999‘=‘999‘ AS C3; +------+----+----+ | C1 | C2 | C3 | +------+----+----+ | NULL | 0 | 1 | +------+----+----+ 1 row in set (0.00 sec)
NULL值表示不确定或未知的值,因此NULL值是否等于或不等于某个特定值,只能使用IS NULL或IS NOT NULL来判断。
NULL值处理
在大部分场景中,NULL值不等于任何值包括NULL值,但在下列场景中设定NULL值相等:
1、对于唯一索引,仅允许唯一索引列存在一个NULL值。
2、对于GROUP BY和DISTINCT操作,所有NULL值当做同一组处理。
3、对于ORDER BY操作,所有NULL值被当做"最小值"排序在一起。
UNKNOW值处理
对于逻辑表达式计算后得到的UNKNOW值,在不同场景中处理方式不同:
1、在WHERE/ON/HAVING三类筛选操作中,UNKNOW值被当做FALSE处理。
2、在CHECK约束中,UNKNOW值被当做TRUE处理,CHECK约束仅对CHCK表达式为FALSE的记录返回错误。