MYSQL外鍵的作用是什么-創(chuàng)新互聯(lián)

MYSQL外鍵的作用是什么,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,先為蜀山等服務(wù)建站,蜀山等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為蜀山企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

MYSQL外鍵是什么?

定義:外鍵是相對(duì)于主鍵說的,是建立表之間聯(lián)系的必須的前提。

例如:

這里有兩張,user(用戶)表和qx(權(quán)限)表,user中g(shù)id是用戶權(quán)限id,而gid是依賴于qx中的id。那么qx中的id就是user的外鍵。

也就是當(dāng)我們給gid創(chuàng)建一個(gè)外鍵,這個(gè)外鍵就是qx中的id時(shí),gid就必須與qx中id一致,我們可以通過外鍵使兩張表進(jìn)行關(guān)聯(lián)。

那么創(chuàng)建外鍵的作用是什么?

1.可以使得兩張表關(guān)聯(lián),保證數(shù)據(jù)的一致性和實(shí)現(xiàn)一些級(jí)聯(lián)操作。

2.保持?jǐn)?shù)據(jù)一致性,完整性。

主要目的是控制存儲(chǔ)在外鍵表中的數(shù)據(jù)。使兩張表形成關(guān)聯(lián),外鍵只能引用外表中的列的值!可以使得兩張表關(guān)聯(lián),保證數(shù)據(jù)的一致性和實(shí)現(xiàn)一些級(jí)聯(lián)操作。

數(shù)據(jù)庫設(shè)計(jì)是否需要外鍵?

這里有兩個(gè)問題:

1.如何保證數(shù)據(jù)庫數(shù)據(jù)的完整性和一致性。

2.第一條對(duì)性能的影響。

正方觀點(diǎn)

1.由數(shù)據(jù)庫自身保證數(shù)據(jù)一致性,完整性,更可靠,因?yàn)槌绦蚝茈y100%保證數(shù)據(jù)的完整性。

而用外鍵即使在數(shù)據(jù)庫服務(wù)器當(dāng)機(jī)或者出現(xiàn)其他問題的時(shí)候,也能夠較大限度的保證數(shù)據(jù)的一致性和完整性。

注意:數(shù)據(jù)庫和應(yīng)用是一對(duì)多的關(guān)系,A應(yīng)用會(huì)維護(hù)他那部分?jǐn)?shù)據(jù)的完整性,系統(tǒng)一變大時(shí),增加了B應(yīng)用,A和B兩個(gè)應(yīng)用也許是不同的開發(fā)團(tuán)隊(duì)來做的。他們?nèi)绾螀f(xié)調(diào)保證數(shù)據(jù)的完整性,而且一年以后如果又增加了C應(yīng)用呢?

2.有主外鍵的數(shù)據(jù)庫設(shè)計(jì)可以增加ER圖的可讀性,這點(diǎn)在數(shù)據(jù)庫設(shè)計(jì)時(shí)非常重要。

3.外鍵在一定程度上說明的業(yè)務(wù)邏輯,會(huì)使設(shè)計(jì)周到具體全面。

反方觀點(diǎn)

1.可以用觸發(fā)器或應(yīng)用程序保證數(shù)據(jù)的完整性

2.過分強(qiáng)調(diào)或者說使用主鍵/外鍵會(huì)平添開發(fā)難度,導(dǎo)致表過多等問題

3.不用外鍵時(shí)數(shù)據(jù)管理簡(jiǎn)單,操作方便,性能高。

(導(dǎo)入導(dǎo)出等操作,在insert,update, delete 數(shù)據(jù)的時(shí)候更快)

注意:在海量的數(shù)據(jù)庫中想都不要去想外鍵,試想,一個(gè)程序每天要insert數(shù)百萬條記錄,當(dāng)存在外鍵約束的時(shí)候,每次要去掃描此記錄是否合格,一般還不 止一個(gè)字段有外鍵,這樣掃描的數(shù)量是成級(jí)數(shù)的增長(zhǎng)!我的一個(gè)程序入庫在3個(gè)小時(shí)做完,如果加上外鍵,需要28個(gè)小時(shí)!

總結(jié)

1.在大型系統(tǒng)中(性能要求不高,安全要求高),使用外鍵;在大型系統(tǒng)中(性能要求高,安全自己控制)不用外鍵;小系統(tǒng)隨便,好用外鍵。

2.用外鍵要適當(dāng),不能過分追求。

3.用程序控制數(shù)據(jù)一致性和完整性時(shí),應(yīng)該寫一層來保證,然后每個(gè)應(yīng)用通過這個(gè)層訪問數(shù)據(jù)庫。

MySQL允許使用外鍵,但是為了完整性檢驗(yàn)的目的,在除了InnoDB表類型之外的所有表類型中都忽略了這個(gè)功能。

這可能有些怪異,實(shí)際上卻非常正常:對(duì)于數(shù)據(jù)庫的所有外鍵的每次插入、更新和刪除后,進(jìn)行完整性檢查是一個(gè)耗費(fèi)時(shí)間和資源的過程,它可能影響性能,特別是當(dāng)處理復(fù)雜的或者是纏繞的連接樹時(shí)。

因而,用戶可以在表的基礎(chǔ)上,選擇適合于特定需求的好結(jié)合。所以,如果需要更好的性能,并且不需要完整性檢查,可以選擇使用MyISAM表類型,如果想要在MySQL中根據(jù)參照完整性來建立表并且希望在此基礎(chǔ)上保持良好的性能,好選擇表結(jié)構(gòu)為innoDB類型。

看完上述內(nèi)容,你們掌握MYSQL外鍵的作用是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

本文名稱:MYSQL外鍵的作用是什么-創(chuàng)新互聯(lián)
URL鏈接:http://bm7419.com/article22/cdgijc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、微信小程序建站公司、GoogleApp開發(fā)、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化