3.4 NULL值操作

NULL值可能令人感到奇怪直到你習(xí)慣它。概念上,NULL意味著“沒有值”或“未知值”,且它被看作與眾不同的值。為了測試NULL,你不能使用算術(shù)比較 操作符例如=、<或!=。為了說明它,試試下列查詢:

mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
|     NULL |      NULL |     NULL |     NULL |
+----------+-----------+----------+----------+

很顯然你不能通過這些比較得到有意義的結(jié)果。相反使用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或 NULL意味著假而其它值意味著真。布爾運(yùn)算的默認(rèn)真值是1。

  • 對NULL的特殊處理即是在前面的章節(jié)中,為了決定哪個(gè)動(dòng)物不再是活著的,使用death IS NOT NULL而不使用death != NULL的原因。

  • 在GROUP BY中,兩個(gè)NULL值視為相同。

  • 執(zhí)行ORDER BY時(shí),如果運(yùn)行 ORDER BY ... ASC,則NULL值出現(xiàn)在最前面,若運(yùn)行ORDER BY ... DESC,則NULL值出現(xiàn)在最后面。

NULL操作的常見錯(cuò)誤是不能在定義為NOT NULL的列內(nèi)插入0或空字符串,但事實(shí)并非如此。在NULL表示"沒有數(shù)值"的地方有數(shù)值。使用IS [NOT] NULL則可以很容易地進(jìn)行測試,如下所示:

mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
|         0 |             1 |          0 |              1 |
+-----------+---------------+------------+----------------+

因此完全可以在定義為NOT NULL的列內(nèi)插入0或空字符串,實(shí)際是NOT NULL。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容