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

MySQL中空值和NULL的區(qū)別小結(jié)

 更新時(shí)間:2024年08月02日 11:41:21   作者:程序猿ZhangSir  
在 MySQL 中,NULL 值和空值是兩個(gè)不同的概念,本文主要介紹了MySQL中空值和NULL的區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下

1. NULL和空值定義上的區(qū)別

在 MySQL 中,NULL 值和空值是兩個(gè)不同的概念,空值就是我們常說的空字符串,用兩個(gè)單引號 '' 代替即可;

NULL 值在MySQL中是占用空間的,而空值則是不占用長度空間的。

舉個(gè)最簡單的例子。

如果把數(shù)據(jù)比作水果,表中的每一個(gè)空位比作一個(gè)個(gè)箱子,水果要放進(jìn)箱子里存儲;

NULL就可以理解為空位上有一個(gè)箱子,但箱子是空的,沒有存放任何水果;

空值就可以理解為空位上連箱子都沒有,真空狀態(tài);

2. NULL和空值在表中顯示的區(qū)別

如下SQL創(chuàng)建一張 user 用戶表,

我將郵箱字段 email 和 性別字段 sex 默認(rèn)值設(shè)計(jì)為空值,除了主鍵uid外其余字段默認(rèn)值設(shè)計(jì)為NULL

CREATE TABLE `user` (
  `uid` int NOT NULL,
  `username` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `password` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL,
  `age` int DEFAULT NULL,
  `email` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT '',
  `sex` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT '',
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

(特別注明:MySQL中創(chuàng)建表默認(rèn)所有字段都是為NULL,上述建表SQL是我修改后展示給各位的,方便小伙伴復(fù)制使用,如果有小伙伴是自己直接創(chuàng)建的表,可以通過執(zhí)行如下SQL修改字段默認(rèn)值)

# 修改語法格式
ALTER TABLE 表名 
MODIFY 字段名 字段類型(要修改為的長度) DEFAULT '要修改為的默認(rèn)值';
 
# 舉例語句
# 將 user 表中 age字段長度改為 30,默認(rèn)值改為kong '',如果只修改默認(rèn)值,長度可以寫原本的值
ALTER TABLE `user` MODIFY 
age VARCHAR(30) DEFAULT ''
...... 
如果要更新多個(gè)字段,按照字段名,字段類型(字段長度) DEFAULT 默認(rèn)值的方式追加即可

然后我在表中添加幾條數(shù)據(jù),有些字段沒有設(shè)置數(shù)據(jù),SQL語句如下,想自己動手的小伙伴自行復(fù)制執(zhí)行;

INSERT INTO `user` VALUES (1, '張三', '12345', 17, '12shfd', '男');
INSERT INTO `user` VALUES (2, '李四', NULL, 18, '', '男');
INSERT INTO `user` VALUES (3, 'NULL', NULL, NULL, '1763@qq', '女');
INSERT INTO `user` VALUES (4, '王五', NULL, NULL, '', '男');
INSERT INTO `user` VALUES (5, NULL, NULL, NULL, '', '');

執(zhí)行完畢后,數(shù)據(jù)表如圖,從這里我們就可以清晰地看出NULL值和空值的區(qū)別。

如果一個(gè)字段默認(rèn)值為NULL我們沒有填寫數(shù)據(jù),在表中就會顯示NULL;

如果一個(gè)字段默認(rèn)值為空值我們沒有填寫任何數(shù)據(jù),在表中就是一片空白,不會顯示NULL;

這里有一個(gè)誤區(qū),如果存儲的數(shù)據(jù)中某條數(shù)據(jù)用戶名為NULL,和在存儲的過程中沒有傳入用戶名數(shù)據(jù)庫采用用戶名默認(rèn)值NULL不是相等的,這個(gè)應(yīng)該很好理解。如下,id為3的那條數(shù)據(jù),表示用戶用戶名就是NULL,;

3. NULL值和空值查詢方式的區(qū)別

3.1 NULL 值的查詢方式

查詢一個(gè)字段的值是否為NULL,判斷條件為 IS NULL(字段值為默認(rèn)值NULL) 或 IS NOT NULL(字段值不為默認(rèn)值NULL);

舉例一:查詢 user 用戶表中字段 username 為 NULL 值的數(shù)據(jù):

SELECT * FROM `user` WHERE `user`.username IS NULL

執(zhí)行SQL,查到的只有id=5的這條數(shù)據(jù),符合預(yù)期結(jié)果;

舉例二:查詢 user 用戶表中字段 username 不為NULL值的數(shù)據(jù);

SELECT * FROM `user` WHERE `user`.username IS NOT NULL

執(zhí)行SQL,查到的是除了剛才id=5以外的四條數(shù)據(jù),符合預(yù)期結(jié)果; 

3.2 空值的查詢方式

空值的查詢方式和普通字段查詢一樣,使用 "=" 或 "!=" 即可;

舉例一:查詢郵箱字段 email 為空值的數(shù)據(jù)

SELECT * FROM `user` WHERE `user`.email = '';

執(zhí)行SQL,結(jié)果查詢到id=2,4,5的三條數(shù)據(jù),符合預(yù)期

 舉例二:查詢郵箱 email 和 性別 sex 都不為空值的數(shù)據(jù)

SELECT * FROM `user`
WHERE `user`.email != ''
AND `user`.sex != '';

執(zhí)行SQL語句,查詢到id=1,3的兩條數(shù)據(jù),符合預(yù)期 

3.3 查詢NULL的方式可以查詢空值

舉例一:查詢默認(rèn)值為空值的字段 email 不為NULL的數(shù)據(jù)

SELECT * FROM `user` WHERE `user`.email IS NOT NULL;

執(zhí)行SQL,查到了表中全部五條數(shù)據(jù) 

舉例二:查詢默認(rèn)值為空值的字段email不為NULL值的數(shù)據(jù)

SELECT * FROM `user` WHERE `user`.email IS NULL;

執(zhí)行SQL,沒有數(shù)據(jù),由此也可以說明 空值 != NULL  

 3.4 查詢空值的方法不可以查詢NULL值

 舉例一:查詢字段age默認(rèn)值為NULL的為NULL的數(shù)據(jù)

SELECT * FROM `user` WHERE `user`.age = NULL;

執(zhí)行SQL,沒有查到任何數(shù)據(jù),但也沒有報(bào)錯(cuò),

舉例二:查詢年齡字段age不為NULL的數(shù)據(jù)

SELECT * FROM `user` WHERE `user`.age != NULL;

執(zhí)行SQL,結(jié)果仍然為空,可以看出,查詢空值的辦法并不適用于查詢NULL值,查詢NULL值只能使用IS NULL(為空),IS NOT NULL(不為空),否則會導(dǎo)致查詢結(jié)果不準(zhǔn)確

4.  聚合函數(shù)會計(jì)算空值但不計(jì)算NULL值

聚合函數(shù) COUNT(),MIN(),SUM()等,他們在計(jì)算數(shù)據(jù)的時(shí)候會計(jì)算空值,卻不會計(jì)算NULL值,這一點(diǎn)在COUNT() 計(jì)數(shù)函數(shù)中尤為明顯;

SELECT COUNT(`user`.age) FROM `user`;

執(zhí)行SQL,會發(fā)現(xiàn)結(jié)果是2,為什么呢?因?yàn)?user 表中id = 3,id=4,id=5這三條數(shù)據(jù)的age都是NULL,所以COUNT函數(shù)沒有將它們計(jì)算在內(nèi),得出的結(jié)果就只有兩條數(shù)據(jù); 

 我們再來看空值的情況

SELECT COUNT(`user`.email) FROM `user`;

執(zhí)行SQL,得出結(jié)果是5,和表中總記錄數(shù)5一致,而我們在上面也看到了,表中id=2,id=4,id=5這三條數(shù)據(jù)的 email 都為空值,但是COUNT函數(shù)仍然將它們計(jì)算在內(nèi),這就是空值和NULL最大的區(qū)別

到此這篇關(guān)于MySQL中空值和NULL的區(qū)別實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL 空值和NULL區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql 表維護(hù)與改造代碼分享

    mysql 表維護(hù)與改造代碼分享

    當(dāng)數(shù)據(jù)庫中表的數(shù)量比較多時(shí),不利于維護(hù),本文將以此問題進(jìn)行詳細(xì)介紹如何維護(hù)mysql表,與如何修改mysql表
    2012-11-11
  • DBeaver連接本地MySQL并創(chuàng)建數(shù)據(jù)庫/表的基礎(chǔ)操作教程

    DBeaver連接本地MySQL并創(chuàng)建數(shù)據(jù)庫/表的基礎(chǔ)操作教程

    DBeaver是一款功能強(qiáng)大的數(shù)據(jù)庫管理工具,支持創(chuàng)建多種數(shù)據(jù)庫,包括達(dá)夢數(shù)據(jù)庫,這篇文章主要給大家介紹了關(guān)于DBeaver連接本地MySQL并創(chuàng)建數(shù)據(jù)庫/表的基礎(chǔ)操作教程,需要的朋友可以參考下
    2024-02-02
  • Mysql恢復(fù)誤刪庫表數(shù)據(jù)完整場景演示

    Mysql恢復(fù)誤刪庫表數(shù)據(jù)完整場景演示

    在開發(fā)和在生產(chǎn)中總會出現(xiàn)各種各樣的失誤和意味,當(dāng)MySQL的數(shù)據(jù)或表被刪除后不要慌,下面這篇文章主要給大家介紹了關(guān)于Mysql恢復(fù)誤刪庫表數(shù)據(jù)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • MySQL和連接相關(guān)的timeout 的詳細(xì)整理

    MySQL和連接相關(guān)的timeout 的詳細(xì)整理

    這篇文章主要介紹了MySQL和連接相關(guān)的timeout 的詳細(xì)整理的相關(guān)資料,本文主要總結(jié)下和連接有關(guān)的timeout,需要的朋友可以參考下
    2017-08-08
  • MySQL UNION 操作符的使用小結(jié)

    MySQL UNION 操作符的使用小結(jié)

    MySQL 中的 UNION 操作符用于合并兩個(gè)或多個(gè) SELECT 語句的結(jié)果集,生成一個(gè)單一的結(jié)果集,下面就來介紹一下MySQL UNION 操作符的使用,感興趣的可以了解一下
    2025-08-08
  • 教你如何通過日志文件恢復(fù)MySQL數(shù)據(jù)

    教你如何通過日志文件恢復(fù)MySQL數(shù)據(jù)

    Binlog日志是二進(jìn)制日志文件,有兩個(gè)作用,一個(gè)是增量備份,另一個(gè)是主從復(fù)制,即主節(jié)點(diǎn)維護(hù)一個(gè)binlog日志文件,從節(jié)點(diǎn)從binlog中同步數(shù)據(jù),也可以通過binlog日志來恢復(fù)數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于如何通過日志文件恢復(fù)MySQL數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • Docker安裝MySQL?8.0兩個(gè)版本的命令總結(jié)

    Docker安裝MySQL?8.0兩個(gè)版本的命令總結(jié)

    docker是一種開源的容器化平臺,可以將應(yīng)用程序及其依賴項(xiàng)打包成一個(gè)隔離的容器,然后在任何操作系統(tǒng)中運(yùn)行,MySQL是一個(gè)流行的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),這篇文章主要介紹了Docker安裝MySQL 8.0兩個(gè)版本的命令,需要的朋友可以參考下
    2026-03-03
  • mysql實(shí)現(xiàn)按組區(qū)分后獲取每組前幾名的sql寫法

    mysql實(shí)現(xiàn)按組區(qū)分后獲取每組前幾名的sql寫法

    這篇文章主要介紹了mysql實(shí)現(xiàn)按組區(qū)分后獲取每組前幾名的sql寫法,具有很好的參考價(jià)值,希望對大家有所幫助。
    2023-03-03
  • MySQL中讀寫分離方案對比分析與選型建議

    MySQL中讀寫分離方案對比分析與選型建議

    MySQL讀寫分離是提升數(shù)據(jù)庫可用性和性能的常見手段,本文將圍繞現(xiàn)實(shí)生產(chǎn)環(huán)境中常見的幾種讀寫分離模式進(jìn)行系統(tǒng)對比,希望對大家有所幫助
    2025-08-08
  • MySQL 5.6.36 Windows x64位版本的安裝教程詳解

    MySQL 5.6.36 Windows x64位版本的安裝教程詳解

    這篇文章主要介紹了MySQL 5.6.36 Windows x64位版本的安裝教程詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-05-05

最新評論

长沙市| 大竹县| 天门市| 兴仁县| 大英县| 大新县| 丽江市| 雷州市| 黔西县| 连州市| 扶风县| 兴山县| 华宁县| 枣庄市| 五常市| 大名县| 洱源县| 建瓯市| 金寨县| 凤翔县| 禹州市| 融水| 松潘县| 大冶市| 枞阳县| 乌苏市| 江油市| 汾西县| 商城县| 开阳县| 望都县| 江津市| 大连市| 信丰县| 永善县| 兰坪| 宜君县| 太原市| 上饶县| 象州县| 苍南县|