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中,就像很多其他的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列,則插入順序中的下一個數字。

  

發佈了66 篇原創文章 · 獲贊 3 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章