婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL為Null會導(dǎo)致5個問題(個個致命)

MySQL為Null會導(dǎo)致5個問題(個個致命)

熱門標(biāo)簽:天智外呼系統(tǒng) 地圖標(biāo)注被騙三百怎么辦 北京人工外呼系統(tǒng)價錢 400電話鄭州申請 沃克斯電梯外呼線路圖 常州電銷外呼系統(tǒng)一般多少錢 房產(chǎn)智能外呼系統(tǒng)品牌 云南語音外呼系統(tǒng)平臺 福州呼叫中心外呼系統(tǒng)哪家好

正式開始之前,我們先來看下 MySQL 服務(wù)器的配置和版本號信息,如下圖所示:

“兵馬未動糧草先行”,看完了相關(guān)的配置之后,我們先來創(chuàng)建一張測試表和一些測試數(shù)據(jù)。

-- 如果存在 person 表先刪除
DROP TABLE IF EXISTS person; 
 
-- 創(chuàng)建 person 表,其中 username 字段可為空,并為其設(shè)置普通索引
CREATE TABLE person (
 id INT PRIMARY KEY auto_increment,
 name VARCHAR(20),
 mobile VARCHAR(13),
 index(name)
) ENGINE='innodb';
 
-- person 表添加測試數(shù)據(jù)
insert into person(name,mobile) values('Java','13333333330'),
 ('MySQL','13333333331'),
 ('Redis','13333333332'),
 ('Kafka','13333333333'),
 ('Spring','13333333334'),
 ('MyBatis','13333333335'),
 ('RabbitMQ','13333333336'),
 ('Golang','13333333337'),
 (NULL,'13333333338'),
 (NULL,'13333333339');
 
select * from person;

構(gòu)建的測試數(shù)據(jù),如下圖所示:

有了數(shù)據(jù)之后,我們就來看當(dāng)列中存在 NULL 值時,究竟會導(dǎo)致哪些問題?

1.count 數(shù)據(jù)丟失

當(dāng)某列存在 NULL 值時,再使用 count 查詢該列,就會出現(xiàn)數(shù)據(jù)“丟失”問題,如下 SQL 所示:

select count(*),count(name) from person;

查詢執(zhí)行結(jié)果如下:

從上述結(jié)果可以看出,當(dāng)使用的是 count(name) 查詢時,就丟失了兩條值為 NULL 的數(shù)據(jù)丟失。

解決方案

如果某列存在 NULL 值時,就是用 count(*) 進(jìn)行數(shù)據(jù)統(tǒng)計。

擴(kuò)展知識:不要使用 count(常量)

阿里巴巴《Java開發(fā)手冊》強(qiáng)制規(guī)定:不要使用 count(列名) 或 count(常量) 來替代 count(),count() 是 SQL92 定義的標(biāo)準(zhǔn)統(tǒng)計行數(shù)的語法,跟數(shù)據(jù)庫無關(guān),跟 NULL 和非 NULL 無關(guān)。

說明:count(*) 會統(tǒng)計值為 NULL 的行,而 count(列名) 不會統(tǒng)計此列為 NULL 值的行。

2.distinct 數(shù)據(jù)丟失

當(dāng)使用 count(distinct col1, col2) 查詢時,如果其中一列為 NULL,那么即使另一列有不同的值,那么查詢的結(jié)果也會將數(shù)據(jù)丟失,如下 SQL 所示:

select count(distinct name,mobile) from person;

查詢執(zhí)行結(jié)果如下:

數(shù)據(jù)庫的原始數(shù)據(jù)如下:

從上述結(jié)果可以看出手機(jī)號一列的 10 條數(shù)據(jù)都是不同的,但查詢的結(jié)果卻為 8。

3.select 數(shù)據(jù)丟失

如果某列存在 NULL 值時,如果執(zhí)行非等于查詢(>/!=)會導(dǎo)致為 NULL 值的結(jié)果丟失。比如以下這個數(shù)據(jù):

我需要查詢除 name 等于“Java”以外的所有數(shù)據(jù),預(yù)期返回的結(jié)果是 id 從 2 到 10 的數(shù)據(jù),但當(dāng)執(zhí)行以下查詢時:

select * from person where name>'Java' order by id;
-- 或
select * from person where name!='Java' order by id;

查詢結(jié)果均為以下內(nèi)容:

可以看出為 NULL 的兩條數(shù)據(jù)憑空消失了,這個結(jié)果并不符合我們的正常預(yù)期。

解決方案

要解決以上的問題,只需要在查詢結(jié)果中拼加上為 NULL 值的結(jié)果即可,執(zhí)行 SQL 如下:

select * from person where name>'Java' or isnull(name) order by id;

最終的執(zhí)行結(jié)果如下:

4.導(dǎo)致空指針異常

如果某列存在 NULL 值時,可能會導(dǎo)致 sum(column) 的返回結(jié)果為 NULL 而非 0,如果 sum 查詢的結(jié)果為 NULL 就可以能會導(dǎo)致程序執(zhí)行時空指針異常(NPE),我們來演示一下這個問題。

首先,我們先構(gòu)建一張表和一些測試數(shù)據(jù):

-- 如果存在 goods 表先刪除
DROP TABLE IF EXISTS goods; 
 
-- 創(chuàng)建 goods 表
CREATE TABLE goods (
 id INT PRIMARY KEY auto_increment,
 num int
) ENGINE='innodb';
 
-- goods 表添加測試數(shù)據(jù)
insert into goods(num) values(3),(6),(6),(NULL);
 
select * from goods;

表中原始數(shù)據(jù)如下:

接下來我們使用 sum 查詢,執(zhí)行以下 SQL:

select sum(num) from goods where id>4;

查詢執(zhí)行結(jié)果如下:

當(dāng)查詢的結(jié)果為 NULL 而非 0 時,就可以能導(dǎo)致空指針異常。

解決空指針異常

可以使用以下方式來避免空指針異常:

select ifnull(sum(num), 0) from goods where id>4;

查詢執(zhí)行結(jié)果如下:

5.增加了查詢難度

當(dāng)某列值中有 NULL 值時,在進(jìn)行 NULL 值或者非 NULL 值的查詢難度就增加了。

所謂的查詢難度增加指的是當(dāng)進(jìn)行 NULL 值查詢時,必須使用 NULL 值匹配的查詢方法,比如 IS NULL 或者 IS NOT NULL 又或者是 IFNULL(cloumn) 這樣的表達(dá)式進(jìn)行查詢,而傳統(tǒng)的 =、!=、>... 等這些表達(dá)式就不能使用了,這就增加了查詢的難度,尤其是對小白程序員來說,接下來我們來演示一下這些問題。

還是以 person 表為例,它的原始數(shù)據(jù)如下:

錯誤用法 1:

select * from person where name>null;

執(zhí)行結(jié)果為空,并沒有查詢到任何數(shù)據(jù),如下圖所示:

錯誤用法 2:

select * from person where name!=null;

執(zhí)行結(jié)果也為空,沒有查詢到任何數(shù)據(jù),如下圖所示:

正確用法 1:

select * from person where name is not null;

執(zhí)行結(jié)果如下:

正確用法 2:

select * from person where !isnull(name);

執(zhí)行結(jié)果如下:

推薦用法

阿里巴巴《Java開發(fā)手冊》推薦我們使用 ISNULL(cloumn) 來判斷 NULL 值,原因是在 SQL 語句中,如果在 null 前換行,影響可讀性;而 ISNULL(column) 是一個整體,簡潔易懂。從性能數(shù)據(jù)上分析 ISNULL(column) 執(zhí)行效率也更快一些。

擴(kuò)展知識:NULL 不會影響索引

細(xì)心的朋友可能發(fā)現(xiàn)了,我在創(chuàng)建 person 表的 name 字段時,為其創(chuàng)建了一個普通索引,如下圖所示:

然后我們用 explain 來分析查詢計劃,看當(dāng) name 中有 NULL 值時是否會影響索引的選擇。

explain 的執(zhí)行結(jié)果如下圖所示:

從上述結(jié)果可以看出,即使 name 中有 NULL 值也不會影響 MySQL 使用索引進(jìn)行查詢。

總結(jié)

本文我們講了當(dāng)某列為 NULL 時可能會導(dǎo)致的 5 種問題:丟失查詢結(jié)果、導(dǎo)致空指針異常和增加了查詢的難度。因此在最后提倡大家在創(chuàng)建表的時候盡量設(shè)置 is not null 的約束,如果某列確實沒有值,可以設(shè)置空值('')或 0 作為其默認(rèn)值。

到此這篇關(guān)于MySQL為Null會導(dǎo)致5個問題(個個致命)的文章就介紹到這了,更多相關(guān)MySQL為Null導(dǎo)致問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 解決mysql使用not in 包含null值的問題
  • 解決從集合運算到mysql的not like找不出NULL的問題
  • MySQL IFNULL判空問題解決方案
  • MySQL中NOT IN填坑之列為null的問題解決
  • mysql not in、left join、IS NULL、NOT EXISTS 效率問題記錄

標(biāo)簽:移動 珠海 拉薩 沈陽 鹽城 徐州 沈陽 黔東

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL為Null會導(dǎo)致5個問題(個個致命)》,本文關(guān)鍵詞  MySQL,為,Null,會,導(dǎo)致,5個,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL為Null會導(dǎo)致5個問題(個個致命)》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL為Null會導(dǎo)致5個問題(個個致命)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩一区二区电影在线| 欧美福利电影网| 色悠悠久久综合| 91精品久久久久久久91蜜桃| 日韩美女视频19| 久久成人av少妇免费| 在线观看免费一区| 国产精品嫩草影院av蜜臀| 国产一区二区三区不卡在线观看 | 亚洲不卡一区二区三区| 三级久久三级久久久| 欧美精品777| 狠狠色丁香婷综合久久| 国产亚洲欧美在线| 成人黄色综合网站| 亚洲一区二区中文在线| 欧美一区二区福利在线| 精一区二区三区| 国产精品久久三区| 欧美三片在线视频观看| 美女精品自拍一二三四| 久久久精品免费观看| www.亚洲精品| 亚洲最大成人网4388xx| 日韩精品一区二区三区中文不卡| 国产精品自拍av| 国产精品美女久久久久av爽李琼 | 在线免费观看日本一区| 婷婷久久综合九色综合绿巨人| 777午夜精品免费视频| 韩国欧美国产一区| 亚洲欧美日韩国产手机在线| 日韩区在线观看| 国产91精品精华液一区二区三区| 有坂深雪av一区二区精品| 精品国产一区二区三区忘忧草| 夫妻av一区二区| 日韩二区三区四区| 中文字幕制服丝袜成人av | 91欧美激情一区二区三区成人| 亚洲精品国产一区二区精华液| av电影一区二区| 日韩黄色片在线观看| 亚洲欧洲精品一区二区三区| 精品欧美乱码久久久久久| 欧美日韩中文字幕一区| 91在线视频免费观看| 高清不卡在线观看| 蜜臂av日日欢夜夜爽一区| 欧美亚洲国产一区二区三区va| 国产suv一区二区三区88区| 石原莉奈在线亚洲三区| 亚洲精品国产精华液| 国产欧美一区二区精品性色| 日韩欧美一区二区三区在线| 欧洲av一区二区嗯嗯嗯啊| av亚洲产国偷v产偷v自拍| 国产suv精品一区二区三区| 久久精品久久久精品美女| 亚洲自拍另类综合| 亚洲愉拍自拍另类高清精品| 亚洲人成亚洲人成在线观看图片| 久久久久久久国产精品影院| 日韩欧美一二三| 欧美一区二区久久| 91精品国产综合久久精品app| 日本乱人伦一区| 91影院在线免费观看| 91网站在线播放| 色哟哟一区二区在线观看| 91在线看国产| 在线观看日韩精品| 欧美在线你懂得| 日韩视频一区在线观看| 欧美成人一区二区| 久久久国产一区二区三区四区小说 | 91激情五月电影| 日本电影欧美片| 欧美性一区二区| 7777精品伊人久久久大香线蕉完整版 | 欧美美女激情18p| 欧美日韩亚洲丝袜制服| 欧美午夜寂寞影院| 欧美人妖巨大在线| 3d成人h动漫网站入口| 日韩一级黄色大片| 国产亚洲制服色| 亚洲欧洲成人自拍| 一区二区三区91| 蜜臀av亚洲一区中文字幕| 国产精品资源站在线| 成人av集中营| 5858s免费视频成人| 日韩精品一区二区三区中文不卡 | 亚洲欧美日韩在线播放| 亚洲福利视频导航| 麻豆精品久久精品色综合| 国产成人精品影视| 色诱视频网站一区| 精品女同一区二区| 亚洲男人天堂一区| 蜜臀久久99精品久久久画质超高清| 国产自产v一区二区三区c| 91看片淫黄大片一级| 欧美久久久久久久久久| 久久久久久久久久久久久久久99 | 亚洲日本丝袜连裤袜办公室| 强制捆绑调教一区二区| 成人性视频免费网站| 欧美群妇大交群中文字幕| 久久精品在线免费观看| 亚洲国产视频a| 成人午夜免费电影| 精品国产99国产精品| 亚洲激情av在线| 国产一区二区不卡在线 | 欧美男人的天堂一二区| 久久精品一区二区三区av| 午夜久久电影网| 99精品视频一区二区| 欧美精品一区二区三区久久久 | 亚洲男同1069视频| 丰满白嫩尤物一区二区| 91精品视频网| 亚洲一级二级三级在线免费观看| 国产福利精品导航| 日韩欧美亚洲一区二区| 亚洲成人综合在线| 91免费小视频| 一区精品在线播放| 国产成人久久精品77777最新版本| 在线观看91精品国产麻豆| 亚洲日本免费电影| 北条麻妃一区二区三区| 中文字幕免费不卡| 国产在线一区观看| 日韩一区二区视频| 麻豆精品在线观看| 中文字幕日韩av资源站| 国产91富婆露脸刺激对白| 久久综合资源网| 国产精品香蕉一区二区三区| 精品第一国产综合精品aⅴ| 日韩在线a电影| 欧美美女一区二区| 蜜臀91精品一区二区三区| 欧美男生操女生| 美女爽到高潮91| 精品少妇一区二区三区在线播放| 免费观看久久久4p| 日韩精品专区在线| 精品一区二区三区在线观看国产| 欧美美女一区二区| 捆绑调教美女网站视频一区| 欧美一个色资源| 国产毛片精品一区| 久久精品夜色噜噜亚洲aⅴ| 粉嫩高潮美女一区二区三区| 国产精品不卡在线观看| 色婷婷国产精品综合在线观看| 亚洲综合视频在线| 欧美日韩国产另类不卡| 蜜臀精品久久久久久蜜臀| 欧美一二三在线| 高清不卡在线观看| 亚洲免费电影在线| 91精品国产色综合久久| 激情综合色综合久久| 国产精品国产三级国产专播品爱网| 成人福利视频在线看| 亚洲一级片在线观看| 精品对白一区国产伦| 91在线观看下载| 蜜桃av一区二区三区电影| 国产精品久久久久久一区二区三区| 色一区在线观看| 精品一区二区三区免费毛片爱| 国产欧美一区二区在线观看| 日本精品免费观看高清观看| 日韩av在线播放中文字幕| 欧美国产在线观看| 在线观看免费成人| 国产电影精品久久禁18| 一区二区三区在线免费| 久久久国产一区二区三区四区小说| 色综合夜色一区| 国产精品资源在线| 亚洲国产一区二区三区青草影视| 精品国产三级a在线观看| 日本乱人伦一区| 国产成人av电影在线| 丝袜a∨在线一区二区三区不卡| 国产欧美一区二区精品忘忧草 | 日韩精品色哟哟| 国产精品视频免费| 精品国产乱码久久久久久牛牛| 色狠狠av一区二区三区| 国产毛片精品视频| 日韩精品一二三四| 亚洲激情综合网|