《Mysql學習MySQL中對于NULL值的理解和使用教程》要點:
本文介紹了Mysql學習MySQL中對于NULL值的理解和使用教程,希望對您有用。如果有疑問,可以聯系我們。
MYSQL必讀NULL值的概念是造成SQL的新手的混淆的普遍原因,他們經常認為NULL是和一個空字符串''的一樣的東西.不是這樣的!例如,下列語句是完全不同的:
MYSQL必讀
mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ("");
MYSQL必讀兩個語句把值插入到phone列,但是第一個插入一個NULL值而第二個插入一個空字符串.第一個的含義可以認為是“電話號碼不知道”,而第二個則可意味著“她沒有電話”.
MYSQL必讀在SQL中,NULL值在于任何其他值甚至NULL值比較時總是假的(FALSE).包含NULL的一個表達式總是產生一個NULL值,除非在包含在表達式中的運算符和函數的文檔中指出.在下列例子,所有的列返回NULL:
MYSQL必讀
mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);
MYSQL必讀如果你想要尋找值是NULL的列,你不能使用=NULL測試.下列語句不返回任何行,因為對任何表達式,expr = NULL是假的:
MYSQL必讀
mysql> SELECT * FROM my_table WHERE phone = NULL;
MYSQL必讀要想尋找NULL值,你必須使用IS NULL測試.下例顯示如何找出NULL電話號碼和空的電話號碼:
MYSQL必讀
mysql> SELECT * FROM my_table WHERE phone IS NULL;
mysql> SELECT * FROM my_table WHERE phone = "";
MYSQL必讀在MySQL中,就像很多其他的SQL服務器一樣,你不能索引可以有NULL值的列.你必須聲明這樣的列為NOT NULL,而且,你不能插入NULL到索引的列中.
MYSQL必讀當用LOAD DATA INFILE讀取數據時,空列用''更新.如果你想要在一個列中有NULL值,你應該在文本文件中使用\N.字面上的詞'NULL'也可以在某些情形下使用.
MYSQL必讀當使用ORDER BY時,首先呈現NULL值.如果你用DESC以降序排序,NULL值最后顯示.當使用GROUP BY時,所有的NULL值被認為是相等的.
MYSQL必讀為了有助于NULL的處理,你能使用IS NULL和IS NOT NULL運算符和IFNULL()函數.
MYSQL必讀MySQL的 IFNULL() 函數和Oracle的 NVL() 函數功能類似.以下簡單舉例:
IFNULL(expr1, expr2)
如果expr1不是NULL,IFNULL()返回expr1,否則它返回expr2.IFNULL()返回一個數字或字符串值,取決于它被使用的上下文環境.
MYSQL必讀
mysql> select IFNULL(1,0);
-> 1
mysql> select IFNULL(0,10);
-> 0
mysql> select IFNULL(1/0,10);
-> 10
mysql> select IFNULL(1/0,'yes');
-> 'yes'
NVL( string1, replace_with)
MYSQL必讀功能:如果string1為NULL,則NVL函數返回replace_with的值,否則返回string1的值.
引申一下,此NVL的作用與SQLserver 中的 ISNULL( string1, replace_with) 一樣.
注意事項:string1和replace_with必須為同一數據類型,除非顯式的使用TO_CHAR函數.
例:
MYSQL必讀
NVL(TO_CHAR(numeric_column), 'some string')
MYSQL必讀其中numeric_column代指某個數字類型的值.
例:
MYSQL必讀
nvl(yanlei777,0) > 0
MYSQL必讀NVL(yanlei777, 0) 的意思是 如果 yanlei777 是NULL,則取 0值
MYSQL必讀null與空值的辨析
來看這樣一段代碼:
MYSQL必讀
CREATE TABLE `test` (
`col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL
) ENGINE = MYISAM ;
MYSQL必讀錯誤(不可以插入null值):
MYSQL必讀
INSERT INTO `test` VALUES (null,1);
MYSQL必讀正確(插入''沒問題):
MYSQL必讀
INSERT INTO `test` VALUES ('',1);
INSERT INTO `test` VALUES ('', NULL);
INSERT INTO `test` VALUES ('1', '2');
MYSQL必讀檢索(''不是null,所以not null會把''都算進去):
MYSQL必讀
SELECT * FROM `test` WHERE col1 IS NOT NULL
MYSQL必讀結果:所有三條數據
MYSQL必讀檢索(正常檢索):
MYSQL必讀
SELECT * FROM `test` WHERE col1 <> ''
MYSQL必讀結果:最后一條數據
MYSQL必讀檢索(<>'',會同時排除''和null的數據,只檢索有內容的數據):
MYSQL必讀
SELECT * FROM `test` WHERE col2<>''
MYSQL必讀總結:
1. null的存儲不是'',是其它特殊的字符表示.
2. null在檢索<>''的時候,也會被排除,因為沒有真正有意義的內容
3. not null嚴格按照字面意思,''不會被排除.
4. 定義not null的字段,可以插入''
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4861.html