MySQ学习笔记之十 NULL值处理
这是MySQL一大特殊之处。
概念上。NULL意味着“没有值”或“未知值”,且它被看作有点与众不同的值。
为了測试NULL。你不能使用算术比較运算符比如=、<或!=。为了说明它,试试下列查询:
mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 != NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| 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 |
+-----------+---------------+
在MySQL中。0意味着假而1意味着真。
NULL值的概念是造成SQL的新手的混淆的普遍原因。他们常常觉得NULL是和一个空字符串''的一样的东西。不是这种。比如。下列语句是全然不同的:
mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ("");
两个语句把值插入到phone列。可是第一个插入一个NULL值而第二个插入一个空字符串。
第一个的含义能够觉得是“电话号码不知道”,而第二个则可意味着“她没有电话”。
在SQL中,NULL值在于不论什么其它值甚至NULL值比較时总是假的(FALSE)。
包括NULL的一个表达式总是产生一个NULL值。除非在包括在表达式中的运算符和函数的文档中指出。
在下列样例,全部的列返回NULL:
mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);
+------+--------+--------------------------+
| NULL | 1+NULL | CONCAT('Invisible',NULL) |
+------+--------+--------------------------+
| NULL | NULL | NULL |
+------+--------+--------------------------+
假设你想要寻找值是NULL的列。你不能使用=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 = "";
TIPS:
在MySQL中,就像非常多其它的SQLserver一样,你不能索引能够有NULL值的列。你必须声明这种列为NOT NULL,并且,你不能插入NULL到索引的列中。
当使用ORDER BY时。首先呈现NULL值。假设你用DESC以降序排序,NULL值最后显示。当使用GROUP BY时。全部的NULL值被觉得是相等的。
为了有助于NULL的处理,你能使用IS NULL和IS NOT NULL运算符和IFNULL()函数。
对某些列类型,NULL值被特殊地处理。假设你将NULL插入表的第一个TIMESTAMP列,则插入当前的日期和时间。
假设你将NULL插入一个AUTO_INCREMENT列,则插入顺序中的下一个数字。
- JSP学习笔记(三)-----使用JSP处理用户注册和登陆
- 学习SWT的笔记 --键盘事件处理
- 学习Altas 笔记[js调用重载的方法出错,如何处理]
- XSLT处理指令学习笔记
- Java开发学习笔记之六:servlet-处理客户form数据
- MyGeneration学习笔记(8) :dOOdad提供的数据绑定、特殊函数和事务处理
- J2ME学习笔记(八)-----处理MIDP RMS
- 学习Altas 笔记[js调用重载的方法出错,如何处理]
- 学习altas笔记[客户端JS和Altas环境初始化关系和DataTable返回数据的客户端处理]
- [ASP.NET学习笔记之二十六]C#的异常处理
- MPEG4 & H.264学习笔记之三 ------ 图像模型(图像处理过程)
- C# 学习笔记 -- 第四天 处理字符串
- Java中文处理学习笔记——Hello Unicode
- 学习Altas 笔记[js调用重载的方法出错,如何处理]
- [转]Java中文处理学习笔记——Hello Unicode
- Java中文处理学习笔记
- oralce学习笔记之异常处理篇
- Java中文处理学习笔记——Hello Unicode
- Java中文处理学习笔记——Hello Unicode
- 学习altas笔记[客户端JS和Altas环境初始化关系和DataTable返回数据的客户端处理]