黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線(xiàn):400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 淺談MySQL外鍵約束的問(wèn)題

淺談MySQL外鍵約束的問(wèn)題

更新時(shí)間:2021-01-12 17:49:44 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1388次

外鍵約束是為了保持子表與父表的數(shù)據(jù)一致,用于在兩個(gè)表之間建立關(guān)系,需要指定引用主表的哪一列。InnoDB是MySQL內(nèi)置存儲(chǔ)引擎中唯一一個(gè)支持外鍵的。InnoDB會(huì)強(qiáng)制外鍵使用索引。事實(shí)上,我們每次做DELETE 或者UPDATE都必須考慮外鍵約束,會(huì)導(dǎo)致開(kāi)發(fā)的時(shí)候很痛苦,測(cè)試數(shù)據(jù)極為不方便。本文我們就來(lái)探討一下MySQL外鍵約束的問(wèn)題

 

首先我們明確一點(diǎn),外鍵約束是一種約束,這個(gè)約束的存在,會(huì)保證表間數(shù)據(jù)的關(guān)系“始終完整”。因此,外鍵約束的存在,并非全然沒(méi)有優(yōu)點(diǎn)。比如使用外鍵,可以保證數(shù)據(jù)的完整性和一致性級(jí)聯(lián)操作方便將數(shù)據(jù)完整性判斷托付給了數(shù)據(jù)庫(kù)完成,減少了程序的代碼量然而,魚(yú)和熊掌不可兼得。外鍵是能夠保證數(shù)據(jù)的完整性,但是會(huì)給系統(tǒng)帶來(lái)很多缺陷。正是因?yàn)檫@些缺陷和問(wèn)題,才導(dǎo)致我們不推薦使用外鍵,MySQL外鍵約束帶來(lái)的問(wèn)題具體如下4個(gè),我們來(lái)詳細(xì)學(xué)習(xí)一下:

 

1.性能問(wèn)題

假設(shè)一張表名為user_tb。那么這張表里有兩個(gè)外鍵字段,指向兩張表。那么,每次往user_tb表里插入數(shù)據(jù),就必須往兩個(gè)外鍵對(duì)應(yīng)的表里查詢(xún)是否有對(duì)應(yīng)數(shù)據(jù)。如果交由程序控制,這種查詢(xún)過(guò)程就可以控制在我們手里,可以省略一些不必要的查詢(xún)過(guò)程。但是如果由數(shù)據(jù)庫(kù)控制,則是必須要去這兩張表里判斷。

 

2.并發(fā)問(wèn)題

在使用外鍵的情況下,每次修改數(shù)據(jù)都需要去另外一個(gè)表檢查數(shù)據(jù),需要獲取額外的鎖。若是在高并發(fā)大流量事務(wù)場(chǎng)景,使用外鍵更容易造成死鎖。

 

3.擴(kuò)展性問(wèn)題

做平臺(tái)遷移方便,比如你從Mysql遷移到Oracle,像觸發(fā)器、外鍵這種東西,都可以利用框架本身的特性來(lái)實(shí)現(xiàn),而不用依賴(lài)于數(shù)據(jù)庫(kù)本身的特性,做遷移更加方便。

分庫(kù)分表方便,在水平拆分和分庫(kù)的情況下,外鍵是無(wú)法生效的。將數(shù)據(jù)間關(guān)系的維護(hù),放入應(yīng)用程序中,為將來(lái)的分庫(kù)分表省去很多的麻煩。

 

4.技術(shù)問(wèn)題

使用外鍵,其實(shí)將應(yīng)用程序應(yīng)該執(zhí)行的判斷邏輯轉(zhuǎn)移到了數(shù)據(jù)庫(kù)上。那么這意味著一點(diǎn),數(shù)據(jù)庫(kù)的性能開(kāi)銷(xiāo)變大了,那么這就對(duì)DBA的要求就更高了。很多中小型公司由于資金問(wèn)題,并沒(méi)有聘用專(zhuān)業(yè)的DBA,因此他們會(huì)選擇不用外鍵,降低數(shù)據(jù)庫(kù)的消耗。
相反的,如果該約束邏輯在應(yīng)用程序中,發(fā)現(xiàn)應(yīng)用服務(wù)器性能不夠,可以加機(jī)器,做水平擴(kuò)展。如果是在數(shù)據(jù)庫(kù)服務(wù)器上,數(shù)據(jù)庫(kù)服務(wù)器會(huì)成為性能瓶頸,做水平擴(kuò)展比較困難。

 

除此之外,使用mysql外鍵約束是有成本的,因?yàn)槊看涡薷臄?shù)據(jù)都要在另外一個(gè)表中執(zhí)行查詢(xún)操作,雖然如上面所說(shuō),外鍵字段有索引,但還是會(huì)帶來(lái)額外的開(kāi)銷(xiāo)。這些開(kāi)銷(xiāo)跟外鍵上的索引有很大關(guān)系,一般外鍵列的選擇性很低,就會(huì)產(chǎn)生一個(gè)非常大但是選擇性低的索引,那么這個(gè)索引除了做外鍵限制,沒(méi)有其他的用處,維護(hù)這樣的索引顯然不是高效的做法。因此,我們?cè)谌粘J褂肕ySQL的過(guò)程中,并不推薦使用外鍵約束。想要深入學(xué)習(xí)MySQL的各種機(jī)制,可以觀(guān)看本站的MySQL教程,體驗(yàn)不一樣的學(xué)習(xí)之旅。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日日夜人人澡人人澡人人看免 | 欧美在线小视频 | 韩剧伦理在线观看 | 美日韩在线观看 | 精品免费tv久久久久久久 | 国产专区青青草原亚洲 | 日本不卡一区二区三区视频 | 日本xxxxx黄区免费看动漫 | 久久xxxx| 久草福利视频 | 日韩一级影院 | 在线国产视频一区 | 日本激情在线看免费观看视频 | 成人国产永久福利看片 | 91成人在线观看 | free性中国hd护士高清 | 毛片中文字幕 | 国产成人免费观看 | 免费网站在线观看国产v片 免费网站看v片在线成人国产系列 | zzji国产精品视频 | 波多野结衣中文一区二区免费 | 亚洲欧美日韩人成 | 一男一女下面一进一出性视频 | 热久久国产精品 | a一级日本特黄aaa大片 | 欧美日本国产 | 美女啪啪网站又黄又免费 | 成 人网站免费 | 毛片网站有哪些 | 国产高清黄色 | 午夜影院性 | 久久96国产精品 | 一级二级三级黄色片 | 女性一级全黄生活片在线播放 | 日韩欧美一区二区久久黑人 | 天天艹天天艹 | 久久久免费网站 | 欧美视频你懂的 | 欧美特黄一级大黄录像 | 伊人久久免费视频 | 嗯男人边吃奶边做边爱视频 |