码迷,mamicode.com
首页 > 其他好文 > 详细

MySQ学习笔记之十 NULL值处理

时间:2014-06-20 10:24:02      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:mysql   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中,就像很多其他的SQL服务器一样,你不能索引可以有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列,则插入顺序中的下一个数字。

  

MySQ学习笔记之十 NULL值处理,布布扣,bubuko.com

MySQ学习笔记之十 NULL值处理

标签:mysql   null   

原文地址:http://blog.csdn.net/u013339851/article/details/28602183

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!