欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中對于NULL值的理解和使用教程

 更新時間:2015年11月25日 11:58:40   作者:朝聞道  
這篇文章主要介紹了MySQL中對于NULL值的理解和使用教程,是MySQL入門學習中的基礎(chǔ)知識,需要的朋友可以參考下

NULL值的概念是造成SQL的新手的混淆的普遍原因,他們經(jīng)常認為NULL是和一個空字符串''的一樣的東西。不是這樣的!例如,下列語句是完全不同的:

mysql> INSERT INTO my_table (phone) VALUES (NULL); 
mysql> INSERT INTO my_table (phone) VALUES ("");

兩個語句把值插入到phone列,但是第一個插入一個NULL值而第二個插入一個空字符串。第一個的含義可以認為是“電話號碼不知道”,而第二個則可意味著“她沒有電話”。

在SQL中,NULL值在于任何其他值甚至NULL值比較時總是假的(FALSE)。包含NULL的一個表達式總是產(chǎn)生一個NULL值,除非在包含在表達式中的運算符和函數(shù)的文檔中指出。在下列例子,所有的列返回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讀取數(shù)據(jù)時,空列用''更新。如果你想要在一個列中有NULL值,你應該在文本文件中使用\N。字面上的詞'NULL'也可以在某些情形下使用。

當使用ORDER BY時,首先呈現(xiàn)NULL值。如果你用DESC以降序排序,NULL值最后顯示。當使用GROUP BY時,所有的NULL值被認為是相等的。

為了有助于NULL的處理,你能使用IS NULL和IS NOT NULL運算符和IFNULL()函數(shù)。

MySQL的 IFNULL() 函數(shù)和Oracle的 NVL() 函數(shù)功能類似。以下簡單舉例:
IFNULL(expr1, expr2)
如果expr1不是NULL,IFNULL()返回expr1,否則它返回expr2。IFNULL()返回一個數(shù)字或字符串值,取決于它被使用的上下文環(huán)境。

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)

功能:如果string1為NULL,則NVL函數(shù)返回replace_with的值,否則返回string1的值。
引申一下,此NVL的作用與SQLserver 中的 ISNULL( string1, replace_with) 一樣。
注意事項:string1和replace_with必須為同一數(shù)據(jù)類型,除非顯式的使用TO_CHAR函數(shù)。
例:

NVL(TO_CHAR(numeric_column), 'some string')

其中numeric_column代指某個數(shù)字類型的值。
例:

nvl(yanlei777,0) > 0

NVL(yanlei777, 0) 的意思是 如果 yanlei777 是NULL,則取 0值

null與空值的辨析
來看這樣一段代碼:

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 ;

錯誤(不可以插入null值):

INSERT INTO `test` VALUES (null,1);

正確(插入''沒問題):

INSERT INTO `test` VALUES ('',1);
INSERT INTO `test` VALUES ('', NULL);
INSERT INTO `test` VALUES ('1', '2');

檢索(''不是null,所以not null會把''都算進去):

SELECT * FROM `test` WHERE col1 IS NOT NULL

結(jié)果:所有三條數(shù)據(jù)

檢索(正常檢索):

SELECT * FROM `test` WHERE col1 <> ''

結(jié)果:最后一條數(shù)據(jù)

檢索(<>'',會同時排除''和null的數(shù)據(jù),只檢索有內(nèi)容的數(shù)據(jù)):

SELECT * FROM `test` WHERE col2<>''

總結(jié):
1. null的存儲不是'',是其它特殊的字符表示。
2. null在檢索<>''的時候,也會被排除,因為沒有真正有意義的內(nèi)容
3. not null嚴格按照字面意思,''不會被排除。
4. 定義not null的字段,可以插入''

相關(guān)文章

  • Mysql系列SQL查詢語句書寫順序及執(zhí)行順序詳解

    Mysql系列SQL查詢語句書寫順序及執(zhí)行順序詳解

    這篇文章主要為大家介紹了Mysql系列SQL查詢語句的書寫順序及執(zhí)行順序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • 詳解MySQL高可用MMM搭建方案及架構(gòu)原理

    詳解MySQL高可用MMM搭建方案及架構(gòu)原理

    本篇文章主要介紹搭建MMM方案以及MMM架構(gòu)的原理。這里不介紹主從、主主的搭建方法,MMM方案不適用對數(shù)據(jù)一致性要求很高的業(yè)務。下面一起來學習學習。
    2016-08-08
  • Mysql8中的無插件方式審計

    Mysql8中的無插件方式審計

    這篇文章主要介紹了Mysql8中的無插件方式審計,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 安裝rpm包時提示錯誤:依賴檢測失敗的解決方法

    安裝rpm包時提示錯誤:依賴檢測失敗的解決方法

    今天在虛擬機中裝MySQL的時候,突然出現(xiàn)了這個依賴檢測錯誤,下面這篇文章主要給大家介紹了關(guān)于安裝rpm包時提示錯誤:依賴檢測失敗的解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • MySQL日志文件詳解

    MySQL日志文件詳解

    這篇文章主要介紹了MySQL日志文件詳解,本文分別講解了錯誤日志、二進制日志、通用查詢?nèi)罩尽⒙樵內(nèi)罩?、Innodb的在線redo日志、更新日志等日志類型和作用介紹,需要的朋友可以參考下
    2015-07-07
  • MySQL導出數(shù)據(jù)遇到secure-file-priv問題的解決方法

    MySQL導出數(shù)據(jù)遇到secure-file-priv問題的解決方法

    這篇文章主要為大家詳細介紹了MySQL導出數(shù)據(jù)遇到secure-file-priv問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • mysql 8.0.17 安裝配置方法圖文教程

    mysql 8.0.17 安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了mysql 8.0.17 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Canal監(jiān)聽MySQL的實現(xiàn)步驟

    Canal監(jiān)聽MySQL的實現(xiàn)步驟

    本文主要介紹了Canal監(jiān)聽MySQL的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 詳解mysql的備份與恢復

    詳解mysql的備份與恢復

    這篇文章主要介紹了mysql的備份與恢復的相關(guān)資料,幫助大家更好的理解和學習mysql,感興趣的朋友可以了解下
    2020-08-08
  • MySql利用父id遞歸向下查詢子節(jié)點的方法實例

    MySql利用父id遞歸向下查詢子節(jié)點的方法實例

    項目中遇到一個需求,要求查處菜單節(jié)點的所有節(jié)點,在網(wǎng)上查了一下,大多數(shù)的方法用到了存儲過程,由于線上環(huán)境不能隨便添加存儲過程,所以自己寫一個,這篇文章主要給大家介紹了關(guān)于MySql利用父id遞歸向下查詢子節(jié)點的相關(guān)資料,需要的朋友可以參考下
    2022-03-03

最新評論