開放原碼軟體社群討論區
新聞: QA問答中心裡頭 的LINUX版本 是Fedora Core4
使用者若有發生相關問題 請至此區反應 謝謝
 
*
歡迎光臨, 訪客. 請先 登入註冊一個帳號. 二月 07, 2012, 06:50:53 pm


請輸入帳號, 密碼以及預計登入時間


頁: [1]   向下
  列印  
作者 主題: [FAQ] NULL值問題  (閱讀 7215 次)
0 會員 以及 1 訪客 正在閱讀本篇主題.
cosa
Administrator
Full Member
*****

Karma: +1/-0
離線 離線

文章: 225


檢視個人資料 電子郵件
« 於: 二月 26, 2005, 10:45:24 pm »

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的列,你不能使用=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 = "";
在MySQL中,就像很多其他的SQL服務器一樣,你不能索引可以有NULL值的列。
你必須聲明這樣的列為NOT NULL,而且,你不能插入NULL到索引的列中。
當用LOAD DATA INFILE讀取數據時,空列用''更新。
如果你想要在一個列中有NULL值,你應該在文本文件中使用N。字面上的詞'NULL'也可以在某些情形下使用。
當使用ORDER BY時,首先呈現NULL值。如果你用DESC以降序排序,NULL值最後顯示。
當使用GROUP BY時,所有的NULL值被認為是相等的。為了有助于NULL的處理,你能使用IS NULL和IS NOT NULL運算符和IFNULL()函數。
對某些列類型,NULL值被特殊地處理。如果你將NULL插入表的第一個TIMESTAMP列,則插入當前的日期和時間。
如果你將NULL插入一個AUTO_INCREMENT列,則插入順序中的下一個數字。
« 最後編輯時間: 一月 01, 1970, 08:00:00 am 由 NULL » 已記錄
頁: [1]   向上
  列印  
 
前往:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC

Valid XHTML 1.0! Valid CSS! Dilber MC Theme by HarzeM