新聞中心
MySQL數(shù)據(jù)庫是當(dāng)前最常用的開源關(guān)系型數(shù)據(jù)庫之一,其中id外鍵作為常見的數(shù)據(jù)庫設(shè)計技巧之一,在實踐中也扮演著重要角色。本文旨在深入探討mysql數(shù)據(jù)庫id外鍵的使用技巧,幫助大家更好地理解和運用。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了巴彥淖爾免費建站歡迎大家使用!
定義id外鍵
我們需要明確id外鍵的概念。id外鍵是指一個表中的字段,它保存著另一個表中某一行的主鍵值。為了確保數(shù)據(jù)的完整性和一致性,id外鍵提供了引用完整性約束,使得在關(guān)系型數(shù)據(jù)庫中,每個引用都指向一個有效的行。
在MySQL數(shù)據(jù)庫中,我們可以通過以下語句定義一個id外鍵:
“`sql
ALTER TABLE 子表名稱 ADD FOREIGN KEY (FK字段名稱) REFERENCES 父表名稱 (PK字段名稱);
“`
其中,子表名稱指的是需要引用父表的表名,F(xiàn)K字段名稱是該表中的字段名稱,用于引用父表中的PK字段名稱。父表名稱指的是被子表引用的表名,PK字段名稱是被引用的主鍵字段名稱。
使用id外鍵帶來的優(yōu)點
接下來,我們來討論一下使用id外鍵的優(yōu)點:
1. 數(shù)據(jù)完整性
id外鍵約束可以保證數(shù)據(jù)的完整性和一致性,確保所有的引用都指向有效的行,從而避免了在實際應(yīng)用中出現(xiàn)的數(shù)據(jù)不一致和錯誤。
2. 數(shù)據(jù)一致性
id外鍵也可以幫助我們維護數(shù)據(jù)的一致性。在關(guān)系型數(shù)據(jù)庫中,數(shù)據(jù)通常被存儲在多個表中,每個表都有其自己的主鍵。通過定義id外鍵,可以確保表之間的一致性,避免了數(shù)據(jù)冗余和不一致。
3. 數(shù)據(jù)查詢效率
在MySQL數(shù)據(jù)庫中,id外鍵創(chuàng)建了一個有向圖,方便我們進行表之間的查詢操作。有向圖可以讓我們按照不同關(guān)系方向進行查詢,并且大大提高查詢效率。
4. 數(shù)據(jù)刪除
使用id外鍵可以方便有效地進行數(shù)據(jù)刪除。在實際應(yīng)用中,有時我們需要刪除某個表中的數(shù)據(jù),這時如果只刪除該表中的數(shù)據(jù),則可能造成數(shù)據(jù)不一致。而通過定義id外鍵,我們可以刪除待刪除數(shù)據(jù)的引用,并且確保操作的安全和有效。
注意事項
除了上述的優(yōu)點和技巧,我們還需要注意一些使用id外鍵的常見注意事項:
1. 父表必須存在主鍵,且主鍵字段不能為NULL,否則創(chuàng)建id外鍵時會報錯。
2. 父表的主鍵類型必須與子表中的外鍵類型一致。
3. 子表中的外鍵必須是父表主鍵的邏輯子集,否則也會創(chuàng)建失敗。
4. 在刪除父表記錄時,僅能刪除未被子表引用的記錄。
MySQL數(shù)據(jù)庫的id外鍵是一種非常實用的數(shù)據(jù)庫設(shè)計技巧,在實現(xiàn)數(shù)據(jù)一致性和完整性方面發(fā)揮了重要作用。在實踐中,我們需要充分理解id外鍵的技巧和注意事項,并且根據(jù)具體情況進行合理的使用和應(yīng)用。
通過對MySQL數(shù)據(jù)庫id外鍵的深入探討,相信讀者們已經(jīng)掌握了一定的知識和技巧。在實踐中,希望大家能夠充分發(fā)揚學(xué)以致用的精神,將所學(xué)知識應(yīng)用于實際場景中,從而達到事半功倍的效果。
相關(guān)問題拓展閱讀:
- mysql外鍵求解!
- mysql 外鍵的設(shè)置
- MySQL里面的主鍵外鍵都是什么意思,看不太明白,誰能通俗的說下,謝謝~~ 怎么樣理解好。
mysql外鍵求解!
外鍵出問題有很多種原因
先保證 主鍵跟外鍵表的引擎是否一致
在確認(rèn) 主鍵列跟外鍵列類型,長度是否一樣(在看是否加了unsigned,只要有一個加了那另外一個列也要加)
在確保你的外鍵表中是否存在主鍵里不存在的記錄,如果有 也無法它加外鍵
在修改innodb 引擎的時候 不拍兆要以為仿物
alter table 表名 type=innodb 執(zhí)行之后看到 query ok 就修改成功了。
在查看一下
show create table 表名 看引擎是否修改成功,如果修改失敗 還是 MyISAM 引擎的話
打開 配置文件 my.ini 找到備賀液 skip-innodb 將他注釋 然后重啟數(shù)據(jù)庫 重新修改引擎。
可能是MySQL:表的類型扮叢的關(guān)系,
MyISAM不支持外鍵
InnoDB支持外鍵消缺仿
請檢查一拿纖下.
mysql 外鍵的設(shè)置
肯定跟前面?zhèn)€表 有關(guān)聯(lián),所以才設(shè)置外鍵橡桐,2個表有聯(lián)系。
級連刪除禪如沖 級連更賀殲新 ,id的紀(jì)錄刪除了,那么 另一個表的內(nèi)容 也全部刪除了
MySQL里面的主鍵外鍵都是什么意思,看不太明白,誰能通俗的說下,謝謝~~ 怎么樣理解好。
其實不止是mysql里,所有的數(shù)據(jù)庫都有
主鍵
外鍵的概念。舉個簡單的例子。
因為在中國有不少人姓名相同,所以雖然在你家里能用名字做統(tǒng)一標(biāo)識,但是在中國這個范圍卻不行,所以就有了身份證號,這是主鍵,保證每一個人有一個。
然后你會上學(xué),上學(xué)的話就有學(xué)籍這么個東西,雖然有
學(xué)籍號
還有學(xué)籍信息,但是我現(xiàn)在想要通過身份證號知清液道你的學(xué)歷的話,在學(xué)籍這個表中,就要加入你的身份信息,這個身份信息與學(xué)籍信息當(dāng)然不是在一個表里的,最簡單的方法,是把身份信息都復(fù)制到學(xué)籍信息這個表里,不過很顯然,這樣數(shù)據(jù)庫就有兩份記錄,一份在身份信息表脊橘里,一份在學(xué)籍信息表里,而且都是身答野物份信息。這叫做冗余,不但占多了空間,還不能保證修改時候的同步,而且你也許還有
社會保險
啦,
駕駛證
之類更多的信息存在,我也不可能每個表都復(fù)制身份信息過去。這時就出現(xiàn)在外鍵,我只需要在這些表中插入身份證號這個列做為外鍵,那我到時候通過這個唯一的編號去身份信息這個表里找就好了,而且修改身份信息的話也只要在身份信息這個表做就好了,很方便很簡單不是嗎
廢話少說,直接進入主題。 主鍵:指的是,唯一標(biāo)識這張表的字段,例如,書號是圖書表的主鍵
外間:指的是 可以敗明跟其他表建立關(guān)系的字段,例如 圖書表的書侍睜名 可以在 借閱信息表中出現(xiàn),這樣圖書表和借閱察談告信息表之間建立了關(guān)系。
約束的分類:
在實際中,約束主要分為以下五種約束:
主鍵約束: 主鍵表示一個唯一的標(biāo)識,本身不能為空
例如:身份證編號是唯一的,不可重復(fù)的,不可為空的
唯一約束: 在一個表中只允許建立一個主鍵約束,而其他如果不希望出現(xiàn)重復(fù)的話,則
就可以使用唯一約束。
檢查約運鉛核束: 檢查一個列的內(nèi)容是否合法
例如: 年齡,只能在0-150歲
例如: 性別,只能是男、女
非空約束: 姓名這樣的字段里面的內(nèi)容就不能為空
外鍵約束: 在兩張表中進行約束操作
例子:
外鍵約束是對于兩張表:一張學(xué)生表student ,另一張課程表course。一門課程里面必須有一個字段屬于哪個學(xué)生
create table tb_person(
p_id int(11) ,
name varchar(50),
age varchar(2),
sex varchar(10),
address varchar(200)
);
create table tb_book(
b_id int(11) auto_increment primary key,
name varchar(100)
p_id int(11) // 表示對應(yīng)的那個人是誰 直接指向 t_peson表的的id編號
);
首先插入:t_peson表的數(shù)據(jù)
insert into tb_peson (p_id,name,age,sex,address) values(1,’ttt’,’22’,’男’,’地球’);
再向t_book 表插入數(shù)據(jù):
insert into tb_book (b_id,name,’00000′,2); 的話就會插入成功
(如果此編號人都不存在的話,則該數(shù)據(jù)不應(yīng)該插入。解決問題就是要使用主-外鍵關(guān)聯(lián); 關(guān)聯(lián)之后子表的數(shù)據(jù)要跟隨父表數(shù)據(jù)的內(nèi)容變動)
就好比一個兒子要有一個父親,你不能說沒有父親突然蹦了一個兒子出來,就違反常理了。
外鍵加這句內(nèi)容: constraint t_peson_book_p_id_fk foreign key(p_id) references t_person(p_id)
如下:
create table tb_book(
b_id int(11) auto_increment primary key,
name varchar(100)
p_id int(11),
constraint t_peson_book_p_id_fk foreign key(p_id) references t_person(p_id)
);
如果你不加外鍵約束的話: 就會出現(xiàn)
再插入這句就不會成功: insert into tb_book (b_id,name,’00000’旁掘,2);(違反約束條件)
這樣就狂野保證表的完整性,不會出現(xiàn)找不到對應(yīng)數(shù)據(jù)的情況
在使用主-外鍵關(guān)聯(lián)時要注意:
1、在子表中設(shè)置外鍵在激升父親中必須是主鍵
2、刪除時應(yīng)該先刪除子表,再刪除父表
mysql數(shù)據(jù)庫id外鍵的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于mysql數(shù)據(jù)庫id外鍵,深入淺出MySQL數(shù)據(jù)庫id外鍵使用技巧,mysql外鍵求解!,mysql 外鍵的設(shè)置,MySQL里面的主鍵外鍵都是什么意思,看不太明白,誰能通俗的說下,謝謝~~ 怎么樣理解好。的信息別忘了在本站進行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務(wù)器和獨立服務(wù)器。創(chuàng)新互聯(lián)——四川成都IDC機房服務(wù)器托管/機柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機房租用、服務(wù)器托管、機柜租賃、大帶寬租用,高電服務(wù)器托管,算力服務(wù)器租用,可選線路電信、移動、聯(lián)通機房等。
網(wǎng)站欄目:深入淺出MySQL數(shù)據(jù)庫id外鍵使用技巧(mysql數(shù)據(jù)庫id外鍵)
標(biāo)題網(wǎng)址:http://www.5511xx.com/article/djspghe.html


咨詢
建站咨詢
