欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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è)單引號(hào) '' 代替即可;

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

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

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

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

然后我在表中添加幾條數(shù)據(jù),有些字段沒有設(shè)置數(shù)據(jù),SQL語句如下,想自己動(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我們沒有填寫數(shù)據(jù),在表中就會(huì)顯示NULL;

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

這里有一個(gè)誤區(qū),如果存儲(chǔ)的數(shù)據(jù)中某條數(shù)據(jù)用戶名為NULL,和在存儲(chǔ)的過程中沒有傳入用戶名數(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語句,查詢到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(不為空),否則會(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ù)沒有將它們計(jì)算在內(nèi),得出的結(jié)果就只有兩條數(shù)據(jù); 

 我們?cè)賮砜纯罩档那闆r

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刪除有外鍵約束的表數(shù)據(jù)方法介紹

    MySQL刪除有外鍵約束的表數(shù)據(jù)方法介紹

    這篇文章主要介紹了MySQL刪除有外鍵約束的表數(shù)據(jù)方法介紹,還是非常不錯(cuò)的,這里給大家分享下,需要的朋友可以參考。
    2017-10-10
  • 快速解決mysql57服務(wù)突然不見了的問題

    快速解決mysql57服務(wù)突然不見了的問題

    下面小編就為大家?guī)硪黄焖俳鉀Qmysql57服務(wù)突然不見了的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 解決MySQL8.0本地計(jì)算機(jī)上的MySQL服務(wù)啟動(dòng)后停止沒有報(bào)告任何錯(cuò)誤的問題(最新推薦)

    解決MySQL8.0本地計(jì)算機(jī)上的MySQL服務(wù)啟動(dòng)后停止沒有報(bào)告任何錯(cuò)誤的問題(最新推薦)

    解決MySQL服務(wù)啟動(dòng)后停止沒有報(bào)告任何錯(cuò)誤的方法包括修改my.ini文件編碼為ANSI、修正MySQL服務(wù)可執(zhí)行文件的路徑以及關(guān)閉系統(tǒng)管理中的MySQL80服務(wù),本文介紹解決MySQL8.0本地計(jì)算機(jī)上的MySQL服務(wù)啟動(dòng)后停止沒有報(bào)告任何錯(cuò)誤,感興趣的朋友一起看看吧
    2025-03-03
  • 修改MySQL數(shù)據(jù)庫(kù)中表和表中字段的編碼方式的方法

    修改MySQL數(shù)據(jù)庫(kù)中表和表中字段的編碼方式的方法

    這篇文章主要介紹了如何修改MySQL數(shù)據(jù)庫(kù)中表和表中字段的編碼方式,需要的朋友可以參考下
    2014-05-05
  • MySQL如何實(shí)現(xiàn)兩張表取差集

    MySQL如何實(shí)現(xiàn)兩張表取差集

    這篇文章主要介紹了MySQL如何實(shí)現(xiàn)兩張表取差集問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • MySQL存儲(chǔ)過程in、out和inout參數(shù)示例和總結(jié)

    MySQL存儲(chǔ)過程in、out和inout參數(shù)示例和總結(jié)

    這篇文章主要給大家介紹了關(guān)于MySQL存儲(chǔ)過程in、out和inout參數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • MYSQL數(shù)據(jù)插入之返回自增主鍵ID的方法詳解

    MYSQL數(shù)據(jù)插入之返回自增主鍵ID的方法詳解

    這篇文章主要介紹了MYSQL數(shù)據(jù)插入之返回自增主鍵ID的方法詳解,mysql中的insert插入之后會(huì)有返回值,返回的是影響的行數(shù),也就是說,成功插入一條數(shù)據(jù)之后返回的是1,失敗則返回0,那么,很多時(shí)候我們都想要得到最后插入的id值,需要的朋友可以參考下
    2023-10-10
  • MySQL并發(fā)更新數(shù)據(jù)時(shí)的處理方法

    MySQL并發(fā)更新數(shù)據(jù)時(shí)的處理方法

    在后端開發(fā)中我們不可避免的會(huì)遇見MySQL數(shù)據(jù)并發(fā)更新的情況,作為一名后端研發(fā),如何解決這類問題也是必須要知道的,同時(shí)這也是面試中經(jīng)??疾斓闹R(shí)點(diǎn)。
    2019-05-05
  • MySQL隨機(jī)查詢記錄的效率測(cè)試分析

    MySQL隨機(jī)查詢記錄的效率測(cè)試分析

    以下的文章主要介紹的是MySQL使用rand 隨機(jī)查詢記錄效率測(cè)試,我們大家一直都以為MySQL數(shù)據(jù)庫(kù)隨機(jī)查詢的幾條數(shù)據(jù),就用以下的東東,其實(shí)其實(shí)際效率是十分低的
    2011-06-06
  • MySQL中外鍵的創(chuàng)建、約束以及刪除

    MySQL中外鍵的創(chuàng)建、約束以及刪除

    這篇文章主要給大家介紹了關(guān)于MySQL中外鍵的創(chuàng)建、約束以及刪除的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論