最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你探究MySQL中的NULL

 更新時(shí)間:2021年11月09日 15:49:27   作者:CoderJie  
我們?cè)谌粘9ぷ髦腥绻佑|Mysql數(shù)據(jù)庫(kù),那么不可避免會(huì)遇到Mysql中,下面這篇文章主要給大家介紹了關(guān)于MySQL中NULL的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

不知道大家有沒有遇到這樣的問題,當(dāng)我們?cè)趯?duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行查詢操作時(shí),條件寫的是status!=1,理論上會(huì)將所有不符合條件的查詢出來,但奇怪的是結(jié)果為NULL的就查不出來,必須得拼接上條件or status IS NULL。本篇文章我們就一起探究一下MySQL中的NULL。

1 MySQL 中的NULL

對(duì)MySQL來說,NULL是一個(gè)特殊的值。

NULL表示不可知不確定,NULL不與任何值相等(包括其本身)

2 NULL占用的長(zhǎng)度

NULL在數(shù)據(jù)庫(kù)中占用的長(zhǎng)度

mysql>  select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') |
+--------------+------------+-------------+
| NULL         |          0 |           1 |
+--------------+------------+-------------+

NULL columns require additional space in the row to record whether their values are NULL.

可以看出空值''的長(zhǎng)度是0,是不占用空間的;而的NULL長(zhǎng)度是NULL,是需要占用額外空間的,所以在一些開發(fā)規(guī)范中,建議將數(shù)據(jù)庫(kù)字段設(shè)置為Not NULL,并且設(shè)置默認(rèn)值''或0。

3 對(duì)NULL值的比較

IS NULL 判斷某個(gè)字符是否為空,并不代表空字符或者是0

SQL92標(biāo)準(zhǔn)中說道,!=NULL 條件判斷永遠(yuǎn)返回false,聚合運(yùn)算永遠(yuǎn)返回0

當(dāng)然在數(shù)據(jù)庫(kù)中可以使用SET ANSI_NULLS OFF關(guān)閉標(biāo)準(zhǔn)模式,但一般不建議這樣去做

所以,要判斷一個(gè)數(shù)是否等于NULL只能用 IS NULL 或者 IS NOT NULL 來判斷

4 SQL對(duì)NULL值進(jìn)行處理

MySQL中專門為我們提供了IFNULL(expr1,expr2)這個(gè)函數(shù),讓我們可以輕松的處理數(shù)據(jù)中的NULL

IFNULL有兩個(gè)參數(shù)。 如果第一個(gè)參數(shù)字段不是NULL,則返回第一個(gè)字段的值。 否則,IFNULL函數(shù)返回第二個(gè)參數(shù)的值(默認(rèn)值)。

select IFNULL(status,0) From t_user;

5 值為NULL 對(duì)查詢條件的影響

  • 不能使用=,<,>這樣的運(yùn)算符,對(duì)NULL做算術(shù)運(yùn)算的結(jié)果都是NULL(所以說當(dāng)status為NULL時(shí),status!=1不會(huì)統(tǒng)計(jì)到NULL)
  • 使用COUNT(expr) 統(tǒng)計(jì)時(shí),也不會(huì)統(tǒng)計(jì)該字段為NULL的數(shù)據(jù)

6 值為NULL對(duì)索引的影響

首先需要注意的一點(diǎn)是,MySQL中某一列數(shù)據(jù)含有NULL,并不一定會(huì)造成索引失效。

MySQL可以在含有NULL的列上使用索引

在有NULL值得字段上使用常用的索引,如普通索引、復(fù)合索引、全文索引等不會(huì)使索引失效。但是在使用空間索引的情況下,該列就必須為 NOT NULL。

7 值為NULL對(duì)排序的影響

在ORDER BY排序的時(shí)候,如果存在NULL值,那么NULL是最小的,ASC正序排序的話,NULL值是在最前面的

如果我們需要在正序排序時(shí),將NULL值放在后邊,這里我們就需要巧借IS NULL

select * from t_user order by age is null, age; 
或者
select * from t_user order by isnull(name), age; 
# 等價(jià)于
select * from (select name, age, (age is null) as isnull from t_user) as foo order by isnull, age; 

8 NULL和空值區(qū)別

NULL也就是在字段中存儲(chǔ)NULL值,空值也就是字段中存儲(chǔ)空字符('')。

1、占用空間區(qū)別

mysql>  select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') |
+--------------+------------+-------------+
| NULL         |          0 |           1 |
+--------------+------------+-------------+
1 row in set

小總結(jié):從上面看出空值('')的長(zhǎng)度是0,是不占用空間的;而的NULL長(zhǎng)度是NULL,其實(shí)它是占用空間的,看下面說明。

NULL columns require additional space in the row to record whether their values are NULL.

NULL列需要行中的額外空間來記錄它們的值是否為NULL。

通俗的講:空值就像是一個(gè)真空轉(zhuǎn)態(tài)杯子,什么都沒有,而NULL值就是一個(gè)裝滿空氣的杯子,雖然看起來都是一樣的,但是有著本質(zhì)的區(qū)別。

總結(jié)

到此這篇關(guān)于MySQL中NULL的文章就介紹到這了,更多相關(guān)MySQL中的NULL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL安裝出現(xiàn)starting the server報(bào)錯(cuò)的解決方案

    MySQL安裝出現(xiàn)starting the server報(bào)錯(cuò)的解決方案

    如果電腦是第一次安裝MySQL,一般不會(huì)出現(xiàn)這樣的報(bào)錯(cuò),如下圖所示,本文主要介紹了MySQL安裝出現(xiàn)starting the server報(bào)錯(cuò)的解決方案,感興趣的可以了解一下
    2024-07-07
  • 詳解Mysql查詢條件中字符串尾部有空格也能匹配上的問題

    詳解Mysql查詢條件中字符串尾部有空格也能匹配上的問題

    在本篇文章里小編給大家整理的是關(guān)于詳解Mysql查詢條件中字符串尾部有空格也能匹配上的問題,需要的朋友們可以參考下
    2020-02-02
  • mysql8重置root用戶密碼的完整步驟

    mysql8重置root用戶密碼的完整步驟

    這篇文章主要給大家分享介紹了關(guān)于mysql8重置root用戶密碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • MySQL學(xué)習(xí)筆記小結(jié)

    MySQL學(xué)習(xí)筆記小結(jié)

    這篇文章主要介紹了MySQL學(xué)習(xí)筆記小結(jié),整體介紹了mysql的很多細(xì)節(jié)我呢體,學(xué)習(xí)優(yōu)化mysql的朋友可以參考下,需要的朋友可以參考下
    2016-05-05
  • mysql合并字符串的實(shí)現(xiàn)

    mysql合并字符串的實(shí)現(xiàn)

    這篇文章主要介紹了mysql合并字符串的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • MySQL之FIND_IN_SET()的用法及說明

    MySQL之FIND_IN_SET()的用法及說明

    這篇文章主要介紹了MySQL之FIND_IN_SET()的用法及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 圖文詳解mysql5.7安裝教程

    圖文詳解mysql5.7安裝教程

    這篇文章主要以圖文結(jié)合的方式為大家詳細(xì)介紹了mysql5.7安裝教程的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • Mysql事務(wù)的隔離級(jí)別(臟讀+幻讀+可重復(fù)讀)

    Mysql事務(wù)的隔離級(jí)別(臟讀+幻讀+可重復(fù)讀)

    這篇文章主要介紹了Mysql事務(wù)的隔離級(jí)別(臟讀+幻讀+可重復(fù)讀),文章通告InnoDB展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-08-08
  • MySQL獲取binlog的開始時(shí)間和結(jié)束時(shí)間(最新方法)

    MySQL獲取binlog的開始時(shí)間和結(jié)束時(shí)間(最新方法)

    這篇文章主要介紹了MySQL如何獲取binlog的開始時(shí)間和結(jié)束時(shí)間,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • MySQL?INSERT語句實(shí)現(xiàn)當(dāng)記錄不存在時(shí)插入的幾種方法

    MySQL?INSERT語句實(shí)現(xiàn)當(dāng)記錄不存在時(shí)插入的幾種方法

    MySQL的INSERT語句是用于向數(shù)據(jù)庫(kù)表中插入新記錄的關(guān)鍵命令,下面這篇文章主要介紹了MySQL?INSERT語句實(shí)現(xiàn)當(dāng)記錄不存在時(shí)插入的幾種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03

最新評(píng)論

洪雅县| 富源县| 蓬安县| 井陉县| 西盟| 施秉县| 保康县| 惠来县| 大洼县| 合川市| 天等县| 大新县| 东方市| 仁化县| 榕江县| 徐州市| 古田县| 东宁县| 蛟河市| 晋城| 台中市| 亚东县| 陇南市| 和顺县| 贡山| 盐池县| 丽江市| 仁寿县| 泉州市| 嘉兴市| 天水市| 黔南| 汕尾市| 嘉鱼县| 斗六市| 茶陵县| 永和县| 马山县| 定兴县| 汕尾市| 黔东|