对于sql的新手,null值的概念常常会造成混淆,他们常认为null是与空字符串''相同的事。情况并非 如此。例如,下述语句是完全不同的: mysql insert into my_table (phone) values (null); mysql insert into my_table (phone) values (''); 这两条语句均会将
对于sql的新手,null值的概念常常会造成混淆,他们常认为null是与空字符串''相同的事。情况并非 如此。例如,下述语句是完全不同的:
mysql> insert into my_table (phone) values (null);
mysql> insert into my_table (phone) values ('');
这两条语句均会将值插入phone(电话)列,但第1条语句插入的是null值,,第2条语句插入的是空字符串 。第1种情况的含义可被解释为“电话号码未知”,而第2种情况的含义可被解释为“该 人员没有电话,因此没有电话号码”。
为了进行null处理,可使用is null和is not null操作符以及ifnull()函数。
在sql中,null值与任何其它值的比较(即使是null)永远不会为“真”。包含null的表达式 总是会导出null值,除非在关于操作符的文档中以及表达式的函数中作了其他规定。下述示例中的所有列 均返回null:
mysql> select null, 1+null, concat('invisible',null);
如果打算搜索列值为null的列,不能使用expr = null测试。下述语句不返回任何行,这是因为,对于 任何表达式,expr = null永远不为“真”:
mysql> select * from my_table where phone = null;
要想查找null值,必须使用is null测试。在下面的语句中,介绍了查找null电话号码和空电话号码的 方式:
mysql> select * from my_table where phone is null;
mysql> select * from my_table where phone = '';
更多信息和示例:
如果你正在使用myisam、innodb、bdb、或memory存储引擎,能够在可能具有null值的列上增加1条索 引。如不然,必须声明索引列为not null,而且不能将null插入到列中。
用load data infile读取数据时,对于空的或丢失的列,将用''更新它们。如果希望在列中具有null 值,应在数据文件中使用n。在某些情况下,也可以使用文字性单词“null”。
使用distinct、group by或order by时,所有null值将被视为等同的。
使用order by时,首先将显示null值,如果指定了desc按降序排列,null值将最后显示。
对于聚合(累计)函数,如count()、min()和sum(),将忽略null值。对此的例外是count(*),它将计数 行而不是单独的列值。例如,下述语句产生两个计数。首先计数表中的行数,其次计数age列中的非null 值数目:
mysql> select count(*), count(age) from person;
对于某些列类型,mysql将对null值进行特殊处理。如果将null插入timestamp列,将插入当前日期和 时间。如果将null插入具有auto_increment属性的整数列,将插入序列中的下一个编号。
注:更多精彩教程请关注三联教程 频道,