国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL 中NULL和空值的區(qū)別

這篇具有很好參考價(jià)值的文章主要介紹了MySQL 中NULL和空值的區(qū)別。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

MySQL 中NULL和空值的區(qū)別?

簡介
NULL也就是在字段中存儲(chǔ)NULL值,空值也就是字段中存儲(chǔ)空字符(’’)。
區(qū)別

1、空值不占空間,NULL值占空間。當(dāng)字段不為NULL時(shí),也可以插入空值。

2、當(dāng)使用 IS NOT NULL 或者 IS NULL 時(shí),只能查出字段中沒有不為NULL的或者為 NULL 的,不能查出空值。

3、判斷NULL 用IS NULL 或者 is not null,SQL 語句函數(shù)中可以使用IFNULL()函數(shù)來進(jìn)行處理,判斷空字符用 =’‘或者<>’'來進(jìn)行處理。

4、在進(jìn)行count()統(tǒng)計(jì)某列的記錄數(shù)的時(shí)候,如果采用的NULL值,會(huì)別系統(tǒng)自動(dòng)忽略掉,但是空值是會(huì)進(jìn)行統(tǒng)計(jì)到其中的。

5、MySql中如果某一列中含有NULL,那么包含該列的索引就無效了。這一句不是很準(zhǔn)確。

6:實(shí)際到底是使用NULL值還是空值(’’),根據(jù)實(shí)際業(yè)務(wù)來進(jìn)行區(qū)分。個(gè)人建議在實(shí)際開發(fā)中如果沒有特殊的業(yè)務(wù)場景,可以直接使用空值。

區(qū)別驗(yàn)證
1、占用空間區(qū)別


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

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

NULL columns require additional space in the row to record whether their values are NULL.
NULL列需要行中的額外空間來記錄它們的值是否為NULL。

總結(jié)

從上面看出空值(’’)的長度是0,是不占用空間的;而的NULL長度是NULL,其實(shí)它是占用空間的,看下面說明。

2、插入/查詢方式區(qū)別


CREATE TABLE `tb_test` (
  `one` varchar(10) NOT NULL,
  `two` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 全部插入 NULL,失敗
mysql> INSERT tb_test VALUES (NULL,NULL);
1048 - Column 'one' cannot be null


-- 全部插入 空值,成功
mysql> INSERT tb_test VALUES ('','');
Query OK, 1 row affected

-- 模擬數(shù)據(jù):
INSERT tb_test VALUES (1,NULL);
INSERT tb_test VALUES ('',2);
INSERT tb_test VALUES (3,3);
`

--空值字段:
-- 使用 is null/is not null
mysql> SELECT * FROM tb_test where one is NULL;
Empty set

mysql> SELECT * FROM tb_test where one is not NULL;
+-----+------+
| one | two  |
+-----+------+
| 1   | NULL |
|     | 2    |
| 3   | 3    |
+-----+------+
3 rows in set
-- 使用 = 、!=
mysql> SELECT * FROM tb_test where one = '';
+-----+-----+
| one | two |
+-----+-----+
|     | 2   |
+-----+-----+
1 row in set

mysql> SELECT * FROM tb_test where one != '';
+-----+------+
| one | two  |
+-----+------+
| 1   | NULL |
| 3   | 3    |
+-----+------+
2 rows in set


--NULL值字段:

-- 使用 is null/is not null
mysql> SELECT * FROM tb_test where two is not NULL;
+-----+-----+
| one | two |
+-----+-----+
|     | 2   |
| 3   | 3   |
+-----+-----+
2 rows in set

mysql> SELECT * FROM tb_test where two is NULL;
+-----+------+
| one | two  |
+-----+------+
| 1   | NULL |
+-----+------+
1 row in set

-- 使用 = 、!=
mysql> SELECT * FROM tb_test where two = '';
Empty set

mysql> SELECT * FROM tb_test where two != '';
+-----+-----+
| one | two |
+-----+-----+
|     | 2   |
| 3   | 3   |
+-----+-----+
2 rows in set



MySQL 中NULL和空值的區(qū)別,android

總結(jié)

如果要單純查NULL值列,則使用 is NULL去查,單純?nèi)ゲ榭罩?’’)列,則使用 =’’。
建議查詢方式:NULL值查詢使用is null/is not null查詢,而空值(’’)可以使用=或者!=、<、>等算術(shù)運(yùn)算符。

3、COUNT 和 IFNULL函數(shù)
使用COUNT函數(shù):


mysql> SELECT count(one) FROM tb_test;
+------------+
| count(one) |
+------------+
|          3 |
+------------+
1 row in set

mysql> SELECT count(two) FROM tb_test;
+------------+
| count(two) |
+------------+
|          2 |
+------------+
1 row in set

mysql> SELECT count(*) FROM tb_test;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set

MySQL 中NULL和空值的區(qū)別,android

使用IFNULL函數(shù):


mysql> SELECT IFNULL(one,111111111) from tb_test WHERE one = '';
+-----------------------+
| IFNULL(one,111111111) |
+-----------------------+
|                       |
+-----------------------+
1 row in set

mysql> SELECT IFNULL(two,11111111) from tb_test where two is NULL;
+----------------------+
| IFNULL(two,11111111) |
+----------------------+
| 11111111             |
+----------------------+
1 row in set

MySQL 中NULL和空值的區(qū)別,android

總結(jié)

使用 COUNT(字段) 統(tǒng)計(jì)會(huì)過濾掉 NULL 值,但是不會(huì)過濾掉空值。

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

4、索引字段說明
看到網(wǎng)上有一些人說: MySql中如果某一列中含有NULL,那么包含該列的索引就無效了。
一個(gè)普通索引,一個(gè)復(fù)合索引。

復(fù)合索引遵守“最左前綴”原則,即在查詢條件中使用了復(fù)合索引的第一個(gè)字段,索引才會(huì)被使用。因此,在復(fù)合索引中索引列的順序至關(guān)重要。


-- ALTER TABLE table_name ADD INDEX index_name(col_name);
ALTER TABLE tb_test ADD INDEX index_oat (one, two);
ALTER TABLE tb_test add INDEX index_two(two);

使用 show keys from 表名;或show indexes from 表名; ,查看這個(gè)表的所有索引信息。
MySQL 中NULL和空值的區(qū)別,android
復(fù)合索引
MySQL 中NULL和空值的區(qū)別,android
普通索引
MySQL 中NULL和空值的區(qū)別,android

發(fā)現(xiàn)查詢two字段 是可以正常使用索引的。我使用的MYSQL 5.7 ,InnoDB 引擎。MySQL可以在含有null的列上使用索引??赡苁瞧渌麠l件下不行。

總結(jié)

在有NULL值得字段上使用常用的索引,如普通索引、復(fù)合索引、全文索引等不會(huì)使索引失效。在官網(wǎng)查看在空間索引的情況下,說明了 索引列必須為NOT NULL。

附官網(wǎng)查看
MySQL 中NULL和空值的區(qū)別,android文章來源地址http://www.zghlxwxcb.cn/news/detail-606555.html

到了這里,關(guān)于MySQL 中NULL和空值的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • java判斷字符串是否和空字符串(““)相等、是否和空引用(null)相等,比較順序不同導(dǎo)致出現(xiàn)死代碼(Dead code)

    java判斷字符串是否和空字符串(““)相等、是否和空引用(null)相等,比較順序不同導(dǎo)致出現(xiàn)死代碼(Dead code)

    我在用Java實(shí)現(xiàn)需求的時(shí)候,用到了字符串跟空字符串(“”)比較,跟空引用null比較,兩個(gè)比較語句的順序不同,一個(gè)順序出現(xiàn)了死代碼(Dead code)。 下面這個(gè)代碼片段,字符串line跟空字符串(“”)的比較放在跟null的比較前面,編譯器提醒紅色方框中的代碼是死代碼:

    2024年02月14日
    瀏覽(28)
  • 【MySQL】 IS NOT NULL 和 != NULL 的區(qū)別?

    【MySQL】 IS NOT NULL 和 != NULL 的區(qū)別?

    最近在開發(fā)小伙伴的需求,遇到了一個(gè)數(shù)據(jù)庫統(tǒng)計(jì)的問題, is not null 結(jié)果正確 !=null 結(jié)果就不對(duì),然后就激發(fā)了獲取真理的想法,那必須的查查 咋回事嘞? 在用MySQL的過程中,你是否存在過如下的幾個(gè)疑問? 我的字段類型明明指定的是NOT NULL,但是為什么還是可以插入空值

    2024年02月08日
    瀏覽(16)
  • 判斷int或Integer變量值為空值null

    判斷int或Integer變量值為空值null

    1.int型變量的值不能為空值null 2.Integer類表示一個(gè)int值,但可以包含一個(gè)空值null 3.判斷Integer變量是否為空值null:Integer變量== null;Integer變量!= null demo示例程序如下: 運(yùn)行結(jié)果:

    2024年02月11日
    瀏覽(20)
  • 【clickhouse實(shí)踐】clickhouse如何在查詢中對(duì)某字段空值設(shè)置默認(rèn)值及對(duì)Nullable值的處理

    在ClickHouse中,我們可以使用一些函數(shù)來處理可空性(nullable)列??煽樟惺侵冈试S包含空值(null)的列。在處理可空列時(shí),我們需要考慮如何處理這些空值。以下是幾個(gè)常用的ClickHouse函數(shù),用于處理可空性列。 IFNULL 函數(shù)用于將一個(gè)可空性列中的空值替換為指定的默認(rèn)值。它

    2024年02月12日
    瀏覽(26)
  • SQL中對(duì)數(shù)據(jù)字段null值的處理

    SQL中對(duì)數(shù)據(jù)字段null值的處理

    在我們平常的數(shù)據(jù)開發(fā)工作中,由于數(shù)據(jù)質(zhì)量的問題或者是在數(shù)據(jù)關(guān)聯(lián)的過程中,可能會(huì)出現(xiàn)字段內(nèi)容為null值的情況,如果該字段需要展示或者是參與計(jì)算的話,怎么處理這些內(nèi)容就很重要了,以下是我用到的SQL中對(duì)null值的處理,與大家分享。 hive里面對(duì)null值的處理用到的

    2024年02月09日
    瀏覽(21)
  • JSON對(duì)象字段為null值的顯示處理

    JSON對(duì)象字段為null值的顯示處理

    如何將JSON對(duì)象中字段為null值的也顯示出來 如果字段的值為null,json對(duì)象的默認(rèn)設(shè)置是當(dāng)字段為null時(shí),不會(huì)將該字段和null值添加到這個(gè)json對(duì)象中; 1、針對(duì)jackson的json對(duì)象全局配置(舉例application.properties文件): 針對(duì)gson的json對(duì)象全局配置(舉例application.properties文件): 當(dāng)然也可以通過

    2024年02月12日
    瀏覽(27)
  • 【MybatisPlus】MP的分頁查詢、多條件查詢以及查詢過程中解決null的空值判定

    【MybatisPlus】MP的分頁查詢、多條件查詢以及查詢過程中解決null的空值判定

    MP這樣一款強(qiáng)大的持久層框架處理起來復(fù)雜的SQL來也是得心應(yīng)手,效率極高,快快與我一同領(lǐng)略Plus的獨(dú)特魅力吧 1.調(diào)用方法傳入?yún)?shù)獲取返回值 創(chuàng)建IPage分頁對(duì)象,設(shè)置分頁參數(shù),1為當(dāng)前頁碼,3為每頁顯示的記錄數(shù),執(zhí)行分頁查詢并獲取其結(jié)果 2.設(shè)置分頁攔截器 將MP提供的分頁

    2024年01月17日
    瀏覽(42)
  • Flutter中使用Overlay傳入context提示:Null check operator used on a null value(對(duì)空值使用空檢查運(yùn)算符)

    Flutter中使用Overlay傳入context提示:Null check operator used on a null value(對(duì)空值使用空檢查運(yùn)算符)

    首先此時(shí)使用的是GetX框架,框架截圖如下: View中代碼如下: logic代碼 對(duì)Overlay的使用封裝了一個(gè)單獨(dú)的類PopToastManager(),PopToastManager()代碼如下: 運(yùn)行結(jié)果如下: ?根據(jù)打印的語句可以得知,代碼根本沒有開始構(gòu)建OverlayEntry(builder:(context){}) 查看錯(cuò)誤,發(fā)現(xiàn)問題出現(xiàn)在對(duì)

    2024年02月03日
    瀏覽(20)
  • Oracle/MySQL/PG/SQL Server關(guān)系數(shù)據(jù)庫中NULL與空字符串的區(qū)別

    Oracle/MySQL/PG/SQL Server關(guān)系數(shù)據(jù)庫中NULL與空字符串的區(qū)別

    在Oracle數(shù)據(jù)庫中,\\\'\\\'(空字符串)與null是什么關(guān)系呢? \\\'\\\'(空字符串)是否會(huì)等同(或者說等價(jià)于)于null值呢?\\\'\\\'跟\\\' \\\'(長度為零的空字符串或包含一個(gè)或多個(gè)空格的空字符串)是否又等價(jià)?下面我們測試一下 如上所示,插入\\\'\\\'時(shí),Oracle數(shù)據(jù)庫確實(shí)將其等同與null,但是, 像\\\'

    2024年02月16日
    瀏覽(31)
  • 【Mysql - 空值處理 】

    【Mysql - 空值處理 】

    MySQL中,空值通常用于表示缺失或未定義的值。處理空值的關(guān)鍵在于理解空值與其他值之間的關(guān)系,以及如何使用不同的SQL函數(shù)來處理和轉(zhuǎn)換空值。 主頁傳送門:?? 傳送 MySQL使用 SQL SELECT 命令及 WHERE 子句來讀取數(shù)據(jù)表中的數(shù)據(jù),但是當(dāng)提供的查詢條件字段為 NULL 時(shí),該命令可

    2024年02月16日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包