# B.3.4.3 NULL 值问题
的概念空值
对于 SQL 新手来说,value 是一个常见的混淆来源,他们经常认为空值
与空字符串相同''
.不是这种情况。例如,以下陈述完全不同:
mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ('');
两个语句都向电话
列,但第一个插入一个空值
值,第二个插入一个空字符串。第一个的意思可以认为是“电话号码不知道”,第二个的意思可以认为是“知道这个人没有电话,因此没有电话号码”。
为了帮助空值
处理,您可以使用一片空白
和不为空
运营商和IFNULL()
功能。
在 SQL 中,空值
与任何其他值相比,值永远不会为真,即使空值
.包含的表达式空值
总是产生一个空值
值,除非在文档中针对表达式中涉及的运算符和函数另有说明。以下示例中的所有列都返回空值
:
mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);
搜索列值空值
, 你不能使用表达式 = NULL
测试。以下语句不返回任何行,因为表达式 = NULL
对于任何表达式都不是真的:
mysql> SELECT * FROM my_table WHERE phone = NULL;
寻找空值
值,您必须使用一片空白
测试。以下语句显示如何找到空值
电话号码和空电话号码:
mysql> SELECT * FROM my_table WHERE phone IS NULL;
mysql> SELECT * FROM my_table WHERE phone = '';
看第 3.3.4.6 节,“使用 NULL 值”,以获取更多信息和示例。
您可以在可以具有的列上添加索引空值
如果您使用的是值MyISAM
,InnoDB
, 要么记忆
存储引擎。否则,您必须声明一个索引列非空
,并且您不能插入空值
入列。
读取数据时加载数据
, 空列或缺失列更新为''
.加载一个空值
值到列中,使用\N
在数据文件中。字面意思空值
在某些情况下也可以使用。看第 13.2.7 节,“加载数据语句”.
使用时清楚的
,通过...分组
, 要么订购方式
, 全部空值
值被视为相等。
使用时订购方式
,空值
值首先显示,如果您指定,则最后显示DESC
以降序排序。
聚合(组)功能,例如数数()
,最小()
, 和和()
忽视空值
价值观。例外情况是数数(*)
,它计算行而不是单个列值。例如,以下语句产生两个计数。第一个是统计表中的行数,第二个是统计非行数空值
中的值年龄
柱子:
mysql> SELECT COUNT(*), COUNT(age) FROM person;
对于某些数据类型,MySQL 处理空值
特别重视。如果你插入空值
成一个时间戳
列,插入当前日期和时间。如果你插入空值
放入具有自动递增
属性,插入序列中的下一个数字。