最新国产好看的视频,伊人天堂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è)不同的概念,空值就是我們常說(shuō)的空字符串,用兩個(gè)單引號(hào) '' 代替即可;

NULL 值在MySQL中是占用空間的,而空值則是不占用長(zhǎng)度空間的。

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

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

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

空值就可以理解為空位上連箱子都沒(méi)有,真空狀態(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)建的表,可以通過(guò)執(zhí)行如下SQL修改字段默認(rèn)值)

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

然后我在表中添加幾條數(shù)據(jù),有些字段沒(méi)有設(shè)置數(shù)據(jù),SQL語(yǔ)句如下,想自己動(dòng)手的小伙伴自行復(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我們沒(méi)有填寫(xiě)數(shù)據(jù),在表中就會(huì)顯示NULL;

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

這里有一個(gè)誤區(qū),如果存儲(chǔ)的數(shù)據(jù)中某條數(shù)據(jù)用戶名為NULL,和在存儲(chǔ)的過(guò)程中沒(méi)有傳入用戶名數(shù)據(jù)庫(kù)采用用戶名默認(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語(yǔ)句,查詢到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,沒(méi)有數(shù)據(jù),由此也可以說(shuō)明 空值 != NULL  

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

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

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

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

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

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

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

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

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

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

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

 我們?cè)賮?lái)看空值的情況

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

執(zhí)行SQL,得出結(jié)果是5,和表中總記錄數(shù)5一致,而我們?cè)谏厦嬉部吹搅耍?strong>表中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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

    在開(kāi)發(fā)和在生產(chǎn)中總會(huì)出現(xiàn)各種各樣的失誤和意味,當(dāng)MySQL的數(shù)據(jù)或表被刪除后不要慌,下面這篇文章主要給大家介紹了關(guān)于Mysql恢復(fù)誤刪庫(kù)表數(shù)據(jù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(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 語(yǔ)句的結(jié)果集,生成一個(gè)單一的結(jié)果集,下面就來(lái)介紹一下MySQL UNION 操作符的使用,感興趣的可以了解一下
    2025-08-08
  • 教你如何通過(guò)日志文件恢復(fù)MySQL數(shù)據(jù)

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

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

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

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

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

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

    MySQL中讀寫(xiě)分離方案對(duì)比分析與選型建議

    MySQL讀寫(xiě)分離是提升數(shù)據(jù)庫(kù)可用性和性能的常見(jiàn)手段,本文將圍繞現(xiàn)實(shí)生產(chǎn)環(huán)境中常見(jiàn)的幾種讀寫(xiě)分離模式進(jìn)行系統(tǒng)對(duì)比,希望對(duì)大家有所幫助
    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

最新評(píng)論

陆丰市| 镇江市| 龙岩市| 平江县| 衡东县| 黎城县| 汨罗市| 安国市| 翁牛特旗| 综艺| 霍邱县| 延津县| 益阳市| 什邡市| 泾源县| 芮城县| 泊头市| 晋城| 库尔勒市| 龙岩市| 山阴县| 宁德市| 宜昌市| 道真| 淅川县| 安宁市| 济宁市| 上思县| 偃师市| 巢湖市| 临漳县| 丰台区| 门源| 凤山市| 佛学| 达拉特旗| 武宣县| 太仓市| 福鼎市| 呼图壁县| 武清区|