成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 為什么mysql字段要使用NOT NULL

為什么mysql字段要使用NOT NULL

熱門標(biāo)簽:大豐地圖標(biāo)注app 南太平洋地圖標(biāo)注 html地圖標(biāo)注并導(dǎo)航 武漢電銷機(jī)器人電話 北京金倫外呼系統(tǒng) 400電話變更申請 呂梁外呼系統(tǒng) 400電話辦理服務(wù)價格最實惠 催天下外呼系統(tǒng)

最近剛?cè)肼毿鹿?,發(fā)現(xiàn)數(shù)據(jù)庫設(shè)計有點小問題,數(shù)據(jù)庫字段很多沒有NOT NULL,對于強(qiáng)迫癥晚期患者來說,簡直難以忍受,因此有了這篇文章。

基于目前大部分的開發(fā)現(xiàn)狀來說,我們都會把字段全部設(shè)置成NOT NULL并且給默認(rèn)值的形式。

  • 通常,對于默認(rèn)值一般這樣設(shè)置:
  • 整形,我們一般使用0作為默認(rèn)值。
  • 字符串,默認(rèn)空字符串

時間,可以默認(rèn)1970-01-01 08:00:01,或者默認(rèn)0000-00-00 00:00:00,但是連接參數(shù)要添加zeroDateTimeBehavior=convertToNull,建議的話還是不要用這種默認(rèn)的時間格式比較好

但是,考慮下原因,為什么要設(shè)置成NOT NULL?

來自高性能Mysql中有這樣一段話:

盡量避免NULL

很多表都包含可為NULL(空值)的列,即使應(yīng)用程序并不需要保存NULL也是如此,這是因為可為NULL是列的默認(rèn)屬性。通常情況下最好指定列為NOT NULL,除非真的需要存儲NULL值。

如果查詢中包含可為NULL的列,對MySql來說更難優(yōu)化,因為可為NULL的列使得索引、索引統(tǒng)計和值比較都更復(fù)雜??蔀镹ULL的列會使用更多的存儲空間,在MySql里也需要特殊處理。當(dāng)可為NULL的列被索引時,每個索引記錄需要一個額外的字節(jié),在MyISAM里甚至還可能導(dǎo)致固定大小的索引(例如只有一個整數(shù)列的索引)變成可變大小的索引。

通常把可為NULL的列改為NOT NULL帶來的性能提升比較小,所以(調(diào)優(yōu)時)沒有必要首先在現(xiàn)有schema中查找并修改掉這種情況,除非確定這會導(dǎo)致問題。但是,如果計劃在列上建索引,就應(yīng)該盡量避免設(shè)計成可為NULL的列。

當(dāng)然也有例外,例如值得一提的是,InnoDB使用單獨的位(bit)存儲NULL值,所以對于稀疏數(shù)據(jù)有很好的空間效率。但這一點不適用于MyISAM。

書中的描述說了幾個主要問題,我這里暫且拋開MyISAM的問題不談,這里我針對InnoDB作為考量條件。

  • 如果不設(shè)置NOT NULL的話,NULL是列的默認(rèn)值,如果不是本身需要的話,盡量就不要使用NULL
  • 使用NULL帶來更多的問題,比如索引、索引統(tǒng)計、值計算更加復(fù)雜,如果使用索引,就要避免列設(shè)置成NULL
  • 如果是索引列,會帶來的存儲空間的問題,需要額外的特殊處理,還會導(dǎo)致更多的存儲空間占用
  • 對于稀疏數(shù)據(jù)又更好的空間效率,稀疏數(shù)據(jù)指的是很多值為NULL,只有少數(shù)行的列有非NULL值的情況

默認(rèn)值

對于MySql而言,如果不主動設(shè)置為NOT NULL的話,那么插入數(shù)據(jù)的時候默認(rèn)值就是NULL。

NULL和NOT NULL使用的空值代表的含義是不一樣,NULL可以認(rèn)為這一列的值是未知的,空值則可以認(rèn)為我們知道這個值,只不過他是空的而已。

舉個例子,一張表中的某一條name字段是NULL,我們可以認(rèn)為不知道名字是什么,反之如果是空字符串則可以認(rèn)為我們知道沒有名字,他就是一個空值。

而對于大多數(shù)程序的情況而言,沒有什么特殊需要非要字段要NULL的吧,NULL值反而會對程序造成比如空指針的問題。

對于現(xiàn)狀大部分使用MyBatis的情況來說,我建議使用默認(rèn)生成的insertSelective方法或者純手動寫插入方法,可以避免新增NOT NULL字段導(dǎo)致的默認(rèn)值不生效或者插入報錯的問題。

值計算

聚合函數(shù)不準(zhǔn)確

對于NULL值的列,使用聚合函數(shù)的時候會忽略NULL值。

現(xiàn)在我們有一張表,name字段默認(rèn)是NULL,此時對name進(jìn)行count得出的結(jié)果是1,這個是錯誤的。

count(*)是對表中的行數(shù)進(jìn)行統(tǒng)計,count(name)則是對表中非NULL的列進(jìn)行統(tǒng)計。

=失效

對于NULL值的列,是不能使用=表達(dá)式進(jìn)行判斷的,下面對name的查詢是不成立的,必須使用is NULL。

與其他值運(yùn)算

NULL和其他任何值進(jìn)行運(yùn)算都是NULL,包括表達(dá)式的值也是NULL。

user表第二條記錄age是NULL,所以+1之后還是NULL,name是NULL,進(jìn)行concat運(yùn)算之后結(jié)果還是NULL。

可以再看下下面的例子,任何和NULL進(jìn)行運(yùn)算的話得出的結(jié)果都會是NULL,想象下你設(shè)計的某個字段如果是NULL還不小心進(jìn)行各種運(yùn)算,最后得出的結(jié)果。。。

distinct、group by、order by

對于distinctgroup by來說,所有的NULL值都會被視為相等,對于order by來說升序NULL會排在最前

其他問題

表中只有一條有名字的記錄,此時查詢名字!=a預(yù)期的結(jié)果應(yīng)該是想查出來剩余的兩條記錄,會發(fā)現(xiàn)與預(yù)期結(jié)果不匹配。

索引問題

為了驗證NULL字段對索引的影響,分別對nameage添加索引。

關(guān)于網(wǎng)上很多說如果NULL那么不能使用索引的說法,這個描述其實并不準(zhǔn)確,根據(jù)引用官方文檔[3]里描述,使用is NULL和范圍查詢都是可以和正常一樣使用索引的,實際驗證的結(jié)果好像也是這樣,看以下例子。

然后接著我們往數(shù)據(jù)庫中繼續(xù)插入一些數(shù)據(jù)進(jìn)行測試,當(dāng)NULL列值變多之后發(fā)現(xiàn)索引失效了。

我們知道,一個查詢SQL執(zhí)行大概是這樣的流程:

首先連接器負(fù)責(zé)連接到指定的數(shù)據(jù)庫上,接著看看查詢緩存中是否有這條語句,如果有就直接返回結(jié)果。

如果緩存沒有命中的話,就需要分析器來對SQL語句進(jìn)行語法和詞法分析,判斷SQL語句是否合法。

現(xiàn)在來到優(yōu)化器,就會選擇使用什么索引比較合理,SQL語句具體怎么執(zhí)行的方案就確定下來了。

最后執(zhí)行器負(fù)責(zé)執(zhí)行語句、有無權(quán)限進(jìn)行查詢,返回執(zhí)行結(jié)果。

從上面的簡單測試結(jié)果其實可以看到,索引列存在NULL就會存在書中所說的導(dǎo)致優(yōu)化器在做索引選擇的時候更復(fù)雜,更加難以優(yōu)化。

存儲空間

數(shù)據(jù)庫中的一行記錄在最終磁盤文件中也是以行的方式來存儲的,對于InnoDB來說,有4種行存儲格式:REDUNDANT、 COMPACT、 DYNAMICCOMPRESSED。

InnoDB的默認(rèn)行存儲格式是COMPACT,存儲格式如下所示,虛線部分代表可能不一定會存在。

變長字段長度列表:有多個字段則以逆序存儲,我們只有一個字段所有不考慮那么多,存儲格式是16進(jìn)制,如果沒有變長字段就不需要這一部分了。

NULL值列表:用來存儲我們記錄中值為NULL的情況,如果存在多個NULL值那么也是逆序存儲,并且必須是8bit的整數(shù)倍,如果不夠8bit,則高位補(bǔ)0。1代表是NULL,0代表不是NULL。如果都是NOT NULL那么這個就存在了。

ROW_ID:一行記錄的唯一標(biāo)志,沒有指定主鍵的時候自動生成的ROW_ID作為主鍵。

TRX_ID:事務(wù)ID。

ROLL_PRT:回滾指針。

最后就是每列的值。

為了說明清楚這個存儲格式的問題,我弄張表來測試,這張表只有c1字段是NOT NULL,其他都是可以為NULL的。

可變字段長度列表:c1c3字段值長度分別為1和2,所以長度轉(zhuǎn)換為16進(jìn)制是0x01 0x02,逆序之后就是0x02 0x01。

NULL值列表:因為存在允許為NULL的列,所以c2,c3,c4分別為010,逆序之后還是一樣,同時高位補(bǔ)0滿8位,結(jié)果是00000010。

其他字段我們暫時不管他,最后第一條記錄的結(jié)果就是,當(dāng)然這里我們就不考慮編碼之后的結(jié)果了。

這樣就是一個完整的數(shù)據(jù)行數(shù)據(jù)的格式,反之,如果我們把所有字段都設(shè)置為NOT NULL,并且插入一條數(shù)據(jù)a,bb,ccc,dddd的話,存儲格式應(yīng)該這樣:

雖然我們發(fā)現(xiàn)NULL本身并不會占用存儲空間,但是如果存在NULL的話就會多占用一個字節(jié)的標(biāo)志位的空間。

文章參考文檔:

https://dev.mysql.com/doc/refman/8.0/en/problems-with-null.html
https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html
https://dev.mysql.com/doc/refman/5.6/en/is-null-optimization.html
https://dev.mysql.com/doc/refman/5.6/en/innodb-row-format.html
https://www.cnblogs.com/zhoujinyi/articles/2726462.html

到此這篇關(guān)于為什么mysql字段要使用NOT NULL的文章就介紹到這了,更多相關(guān)mysql字段使用NOT NULL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 解決mysql使用not in 包含null值的問題
  • 解決從集合運(yùn)算到mysql的not like找不出NULL的問題
  • MySQL null與not null和null與空值''''''''的區(qū)別詳解
  • MySQL中建表時可空(NULL)和非空(NOT NULL)的用法詳解
  • MySQL中NOT IN填坑之列為null的問題解決
  • MySQL中可為空的字段設(shè)置為NULL還是NOT NULL
  • MySQL查詢空字段或非空字段(is null和not null)
  • mysql not in、left join、IS NULL、NOT EXISTS 效率問題記錄
  • MySQL非空約束(not null)案例講解

標(biāo)簽:西寧 徐州 南充 龍巖 自貢 無錫 迪慶 麗水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《為什么mysql字段要使用NOT NULL》,本文關(guān)鍵詞  為什么,mysql,字段,要,使用,;如發(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字段要使用NOT NULL》相關(guān)的同類信息!
  • 本頁收集關(guān)于為什么mysql字段要使用NOT NULL的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产精品.xx视频.xxtv| 2021av网| 国产精品自拍99| 国产高清视频一区二区| 97精品久久久午夜一区二区三区| 国产精品一区二区中文字幕| 一级少妇精品久久久久久久| 97人洗澡人人免费公开视频碰碰碰| 久久久午夜精品理论片中文字幕| 色播视频在线播放| 在线观看国产精品日韩av| 成人系列视频| 尤物视频免费在线观看| 高清国产在线一区| 99re这里只有精品首页| 免费在线欧美黄色| 国产91丝袜美女在线播放| 午夜dj在线观看高清视频完整版| 久久99视频精品| 国产娇喘精品一区二区三区图片| 你懂得在线网址| 久久精品国亚洲| 99国产精品99| 我不卡一区二区| av电影在线观看不卡| 亚洲超碰在线| 欧美亚洲丝袜传媒另类| 在线日韩中文| 欧美另类极限扩张| www.麻豆av.com| 色噜噜在线观看| 蜜臀av色欲a片无码精品一区| 亚洲欧洲xxxx| 欧美性三三影院| 青青草国产精品97视觉盛宴| 国产91精品一区二区麻豆亚洲| 国产中文欧美日韩在线| 婷婷亚洲成人| 99热免费精品在线观看| 男人天堂亚洲二区| 黄页免费在线观看视频| 日韩精品一区二区三区外面| 日本一区二区三区www| 成人情趣片在线观看免费| 五月婷婷综合激情| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 精品亚洲成a人片在线观看| 久久精品免费一区二区三区| 俺去了亚洲欧美日韩| 国产传媒在线| 午夜精品福利一区二区蜜股av| 国内一区二区在线视频观看| www黄色网址| 欧美日韩国产首页| 在线播放日韩欧美| 亚洲不卡免费视频| 国产黄色片视频| 欧美少妇网站| 日韩av网站在线免费观看| 国产三区四区在线观看| 欧美污在线观看| 国产精久久久久| 欧美羞羞视频| 精品视频在线一区二区| 中文字幕久精品免| 欧美精品一区三区| 国产偷窥老熟盗摄视频| 日日躁夜夜躁人人揉av五月天| 91久久香蕉国产日韩欧美9色| 亚洲色图在线看| l8videosex性欧美69| 搡老女人一区二区三区视频tv| 91精品国产乱码久久久久久久| 国产精品偷伦视频免费观看国产| 亚洲xxxx2d动漫1| 草莓视频app18在线视频| 免费看的av网站| 日本国产欧美| wwwxx欧美| 久久精品国产亚洲7777| 亚洲成人av资源网| 国产精品无码毛片| 在线视频中文字幕久| 日韩黄色在线免费观看| 日本高清在线观看| 欧美一区二区三区成人| 这里只有精品在线观看视频| 国产叼嘿视频在线观看| 超碰中文在线| 盗摄女厕thunder| 久久免费视频播放| 尤物视频网站在线观看| 97超碰在线播放| 黄在线免费看| 污视频在线播放| 亚洲免费视频在线观看| 尤物视频在线观看视频| 四虎国产精品成人永久免费影视| 91黄色在线观看| 欧美一区精品| 亚州av综合色区无码一区| 国产美女永久无遮挡| 大量国产精品视频| 亚洲精品蜜桃久久久久久| 国产97在线亚洲| 一出一进一爽一粗一大视频| a∨色狠狠一区二区三区| 又粗又硬又爽国产视频| 麻豆一区二区三区视频| 成人福利在线视频| 欧美色大人视频| 最近中文字幕mv在线一区二区三区四区| 老司机午夜精品99久久| 日本视频一区二区在线观看| 亚洲精品美女在线观看播放| 在线播放亚洲激情| 午夜精品影视国产一区在线麻豆| 老汉色老汉首页av亚洲| 日韩欧美资源站| 国产999精品久久久久久| 99精品在线视频观看| 国产精品久久久久久久免费软件| 欧美国产一级片| av中文字幕不卡| 国产精品入口夜色视频大尺度| 激情婷婷综合| 日本sm极度另类视频| 2018中文字幕在线观看| 黄色av网站在线播放| 成人av电影免费在线播放| 成人黄色在线免费| 四虎海外影库www4hu| 亚洲日本高清| 五月天婷婷丁香网| 影音先锋5566资源网| 涩多多在线观看| 欧美性xxxxx极品| 亚洲欧美小说色综合小说一区| 在线天堂一区av电影| 少妇久久久久| 亚洲国产精品一区二区www在线| 91亚洲va在线va天堂va国| 精品国产乱码久久久久久天美| 美女视频免费观看网站在线| 免费看成年人视频| 暧暧视频免费| 日韩在线三区| 欧美特级限制片免费在线观看| 国语自产精品视频在线看一大j8| 91美女片黄在线观看91美女| 激情小说 在线视频| 国产激情av在线| www.色偷偷.com| 日韩精品免费专区| 欧美电影网址| 日韩精品第1页| 久久久成人免费视频| 青青青免费在线| 美女激情视频网站| 中文字幕jux大岛优香| 亚洲永久免费精品| 日本欧美视频在线观看| 97视频在线看| 亚洲一二区在线| www狠狠操| 国产精品黄色| 精品无人区无码乱码毛片国产| 亚洲国产精品天堂| 五月婷婷久久丁香| 国产又猛又黄又爽| 久久婷婷人人澡人人喊人人爽| 亚洲欧洲精品一区二区三区| 国产午夜麻豆影院在线观看| 久久久久资源| 免费在线观看亚洲视频| 国产亚洲精品精品国产亚洲综合| 亚洲精品久久久久久久久久久久久| 成人激情免费在线| 成人久久综合| 一级毛片视频在线| 欧美成人aaaaⅴ片在线看| h网站在线免费观看| 精品国精品国产自在久国产应用| 亚洲精品电影网在线观看| 只有这里有精品| 午夜精品一区二区三| 中国黄色在线视频| 国产日韩精品在线播放| 在线看片你懂的| 国产视频不卡在线| 免费能直接在线观看黄的视频| 中国特级黄色大片| 视频在线一区二区三区| 精品视频免费在线播放| 亚洲人人精品| 亚洲一区国产精品| 一级黄色片在线观看| 丰满少妇又爽又紧又丰满69| 麻豆视频在线观看免费网站黄| 在线观看日韩电影| 亚洲男人av电影| 亚洲人精品午夜在线观看| 欧美熟妇精品一区二区蜜桃视频| 亚洲精品久久久久久下一站| 国产一级久久久久毛片精品| 色呦呦网站入口| 奇米影视888狠狠狠777不卡| 99精品国产九九国产精品| 国产乱人乱偷精品视频a人人澡| 夜先锋资源站| 日韩一级二级三级| 欧美极品videos大乳护士| 麻豆精品一区二区三区| 亚洲一区二区在线免费观看视频| 91视频免费观看网站| 久久久久久久久成人| 久热中文字幕精品视频在线| 亚洲三级视频网站| 男女超爽视频免费播放| 亚洲视频网在线直播| 99精品国产99久久久久久白柏| 亚洲52av| 韩国一区二区视频| 亚洲在线视频免费观看| 青青草国产成人av片免费| 国产精品x8x8一区二区| 黄a大片av永久免费| 欧美不卡在线观看| 四虎在线视频| 不卡毛片在线看| 国产精品美女呻吟| 亚洲综合欧美日韩| 国产传媒在线看| 久久亚洲av午夜福利精品一区| 欧美色手机在线观看| 国产高清中文字幕| 中韩乱幕日产无线码一区| 女人天堂av手机在线| 蜜臀av免费在线观看| 中文字幕亚洲日本岛国片| 91麻豆精品秘密| 日韩1区2区日韩1区2区| 亚洲成av人片在线观看香蕉| 亚洲综合在线播放| 福利在线一区二区三区| 欧美xxx在线| 性欧美videos高清hd4k| 成人午夜av在线| 女人色极品影院| 亚洲国产精久久久久久| 亚洲制服丝袜一区| 免费超碰在线| 亚洲精选国产| 先锋av在线资源| 国产传媒在线视频| 亚洲天堂久久久久久久| 久久婷婷国产综合尤物精品| 日韩福利一区二区| 欧美精品色婷婷五月综合| 日本中文字幕在线播放| 欧美乱大交xxxx| 九色视频在线观看免费播放| 999福利在线视频| 91精品啪在线观看国产手机| 麻豆影视国产在线观看| 免费在线看成人av| jzzjzzjzz亚洲成熟少妇| 亚洲av中文无码乱人伦在线视色| 日韩精品一区二区三| 一本一道人人妻人人妻αv| 91免费在线播放视频| 美女福利网站视频在线观看| av亚洲一区| 日韩毛片免费看| 欧美大片黄色| 久久这里只有精品23| 中文字幕av一区中文字幕天堂| 三级视频在线播放| 国产精品乡下勾搭老头1| 亚洲欧美日韩精品永久在线| 亚洲第一av网站| 亚洲人成网站精品片在线观看| 欧美成人精品欧美一级乱| 午夜精品久久久久久久96蜜桃| 亚洲av成人精品一区二区三区在线播放| 伊人久久大香线蕉综合网蜜芽| 亚洲v日韩v综合v精品v| 蜜臀aⅴ国产精品久久久国产老师| jzzjzzjzz亚洲成熟少妇| 国产日韩欧美一区在线| 一本色道久久精品| 97蜜桃久久| 成人综合在线观看| 中文字幕永久免费视频| 在线观看免费一区二区| 亚洲天堂av资源在线观看| 免费a级观看| 亚洲天堂在线视频观看| 免费人成网ww777kkk手机| 天天做天天摸天天爽国产一区| 欧美精品色婷婷五月综合| 国产特黄级aaaaa片免| 4438x全国最大成人| 少妇搡bbbb搡bbb搡打电话| 青青在线免费视频| 99久久精品国产一区二区小说| 成人免费无遮挡无码黄漫视频| 国产三级午夜理伦三级| 国产在线播放一区| 久久久久久久久丰满| 久久久久久久久久久免费| 91精品国产色综合久久不卡粉嫩| 3d欧美精品动漫xxxx无尽| 一区二区三区四区乱视频| 首播影院在线观看免费观看电视| 精品91久久久| 思思99精品视频在线观看| 亚洲激情电影在线| 91av在线免费| 天堂在线观看视频观看www| 8x8x最新地址| 免费全黄无遮挡裸体毛片| 中文字幕永久在线观看| 1插菊花综合| 欧美v日韩v国产v| 国产一级做a爰片在线看免费| ...中文天堂在线一区| 日韩激情视频|