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

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

 更新時間:2023年12月13日 10:24:45   作者:kangfu_521  
這篇文章主要介紹了MySQL中NULL和空值的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

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

簡介

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

區(qū)別

1、空值不占空間,NULL值占空間。當字段不為NULL時,也可以插入空值。

2、當使用 IS NOT NULL 或者 IS NULL 時,只能查出字段中沒有不為NULL的或者為 NULL 的,不能查出空值。

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

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

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

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

區(qū)別驗證

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

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

通俗的講:

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

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

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

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

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



小結(jié):

如果要單純查NULL值列,則使用 is NULL去查,單純?nèi)ゲ榭罩?’’)列,則使用 =’’。

建議查詢方式:NULL值查詢使用is null/is not null查詢,而空值(’’)可以使用=或者!=、<、>等算術(shù)運算符。

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

使用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

小結(jié):使用 COUNT(字段) 統(tǒng)計會過濾掉 NULL 值,但是不會過濾掉空值。

說明:

IFNULL有兩個參數(shù)。如果第一個參數(shù)字段不是NULL,則返回第一個字段的值。

否則,IFNULL函數(shù)返回第二個參數(shù)的值(默認值)。

4、索引字段說明

看到網(wǎng)上有一些人說: MySql中如果某一列中含有NULL,那么包含該列的索引就無效了。

一個普通索引,一個復合索引。

復合索引遵守“最左前綴”原則,即在查詢條件中使用了復合索引的第一個字段,索引才會被使用。因此,在復合索引中索引列的順序至關(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 表名; ,查看這個表的所有索引信息。

復合索引

普通索引

發(fā)現(xiàn)查詢two字段 是可以正常使用索引的。我使用的MYSQL 5.7 ,InnoDB 引擎。MySQL可以在含有null的列上使用索引。可能是其他條件下不行。

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

附官網(wǎng)查看

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL大庫搭建主從的一種思路分享

    MySQL大庫搭建主從的一種思路分享

    這篇文章主要介紹了MySQL大庫搭建主從的一種思路分享,幫助大家更好的理解和學習使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-03-03
  • MySQL NULL 值處理實例詳解

    MySQL NULL 值處理實例詳解

    這篇文章主要介紹了MySQL NULL 值處理實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • MySQL插入數(shù)據(jù)insert?ignore語法重復數(shù)據(jù)自動忽略

    MySQL插入數(shù)據(jù)insert?ignore語法重復數(shù)據(jù)自動忽略

    這篇文章主要給大家介紹了關(guān)于MySQL插入數(shù)據(jù)insert?ignore語法重復數(shù)據(jù)自動忽略的相關(guān)資料,最近工作中使用到了insert ignore into語法,感覺這個語法還是挺有用的,就記錄下來做個總結(jié),需要的朋友可以參考下
    2023-08-08
  • MYSQL中information_schema的使用

    MYSQL中information_schema的使用

    information_schema是MySQL中的一個虛擬數(shù)據(jù)庫,用于提供關(guān)于 MySQL 服務器及其數(shù)據(jù)庫的元數(shù),這些元數(shù)據(jù)包括數(shù)據(jù)庫名稱、表名稱、列的數(shù)據(jù)類型、訪問權(quán)限等信息,下面就來詳細的介紹一下如何使用,感興趣的可以了解一下
    2025-08-08
  • MySQL CRUD 查詢、插入、更新、刪除全實戰(zhàn)指南

    MySQL CRUD 查詢、插入、更新、刪除全實戰(zhàn)指南

    在 MySQL日常開發(fā)中CRUD是最核心的高頻操作,本文基于實戰(zhàn)場景,全面拆解MySQL的增刪改查操作,所有SQL語句均采用小寫形式,貼合實際開發(fā)規(guī)范,同時涵蓋聚合查詢、分組統(tǒng)計等進階內(nèi)容,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • C#編寫方法實例

    C#編寫方法實例

    在下面的練習中,將創(chuàng)建一個應用程序,它包含的一個方法能夠計算一名顧問的收費金額——假定該顧問每天收取固定的費用,將根據(jù)工作了多少天來收費。首先要開發(fā)應用程序的邏輯,然后利用“生成方法存根向?qū)А眮韺懗鲞@個邏輯使用的方法。接著,我們將在一個控制臺應用程序中運行方法,以獲得對該程序的最終印象。最后,我們將使用Visual Studio 2005調(diào)試器來檢查方法調(diào)用。
    2008-04-04
  • MySQL MGR 有哪些優(yōu)點

    MySQL MGR 有哪些優(yōu)點

    這篇文章主要介紹了MySQL MGR 有哪些優(yōu)點,文中講解非常細致,幫助大家更好的理解和學習MySQL mgr,感興趣的朋友可以了解下
    2020-08-08
  • MySql的存儲過程學習小結(jié) 附pdf文檔下載

    MySql的存儲過程學習小結(jié) 附pdf文檔下載

    這篇文章主要是介紹mysql存儲過程的創(chuàng)建,刪除,調(diào)用及其他常用命令
    2012-03-03
  • 如何解決安裝MySQL5.0后出現(xiàn)1607異常

    如何解決安裝MySQL5.0后出現(xiàn)1607異常

    小伙們在安裝mysql5.0的時候是不是遇到過1607異常問題,大家都是怎么解決的呢?下面小編跟大家分享我是如何解決安裝MySQL5.0后出現(xiàn)1607異常的,需要的朋友可以參考下
    2015-10-10
  • MySQL 從全庫備份中恢復指定的表和庫示例

    MySQL 從全庫備份中恢復指定的表和庫示例

    這篇文章主要介紹了MySQL 從全庫備份中恢復指定的表和庫示例的相關(guān)資料,這里提供了相應的方法,來實現(xiàn)恢復指定的表和庫數(shù)據(jù),需要的朋友可以參考下
    2016-11-11

最新評論

蒙自县| 将乐县| 如东县| 治县。| 西青区| 板桥市| 连南| 德钦县| 基隆市| 得荣县| 逊克县| 专栏| 高阳县| 龙口市| 陵川县| 金堂县| 瑞丽市| 博湖县| 民县| 金溪县| 马龙县| 贡觉县| 南涧| 拜城县| 青州市| 浪卡子县| 青田县| 孙吴县| 中江县| 射阳县| 如东县| 渝北区| 贵阳市| 怀来县| 昭苏县| 玉林市| 突泉县| 双峰县| 九龙城区| 日照市| 郸城县|