共計 1807 個字符,預(yù)計需要花費 5 分鐘才能閱讀完成。
這篇文章主要介紹“MySQL 外鍵約束知識點有哪些”,在日常操作中,相信很多人在 MySQL 外鍵約束知識點有哪些問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL 外鍵約束知識點有哪些”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學(xué)習(xí)吧!
一、MySQL 外鍵約束作用
外鍵約束(Foreign Key)即數(shù)據(jù)庫中兩個數(shù)據(jù)表之間的某個列建立的一種聯(lián)系。這種聯(lián)系通常是以實際場景中含義完全相同的字段所造成的。MySQL 通過外鍵約束的引入,可以使得數(shù)據(jù)表中的數(shù)據(jù)完整性更強(qiáng),也更符合顯示情況。下面,我舉一個例子來說明 MySQL 外鍵約束的作用。
假如我們對大學(xué)學(xué)生成績管理系統(tǒng)建立數(shù)據(jù)庫,有兩張表,一張表是學(xué)生表,存儲了學(xué)生的學(xué)號、姓名、性別、院系等信息,還有一張表是成績表,存儲了學(xué)生學(xué)號、課程編號、考試成績等信息。這樣,這兩張表之間就會通過學(xué)生學(xué)號建立外鍵約束。很自然的我們想到,成績表的學(xué)生學(xué)號依賴于學(xué)生表的學(xué)生學(xué)號存在,如果一個學(xué)生畢業(yè)、或者退學(xué),從學(xué)生表中刪除時,那么他的相關(guān)成績也就沒有必要在成績表中存在了。在沒有創(chuàng)建外鍵關(guān)系之前,這兩張表完全是獨立存在的,我們可以強(qiáng)行在成績表中插入一個不存在學(xué)生的相關(guān)成績,也可以強(qiáng)行刪除學(xué)生表中的一個學(xué)生,并且不管其成績信息是否在成績表中存在。但是,在建立外鍵關(guān)系后,MySQL 數(shù)據(jù)庫會約束上述兩種行為,每次對數(shù)據(jù)進(jìn)行插入或者刪除時,都會檢查數(shù)據(jù)完整性,使得我們的操作必須符合實際情況。
二、外鍵約束創(chuàng)建(一)創(chuàng)建外鍵約束的條件
MySQL 數(shù)據(jù)庫外鍵的創(chuàng)建,需要滿足以下四個條件,否則會被 MySQL 數(shù)據(jù)庫拒絕:
1、創(chuàng)建外鍵的表和列存在
2、組成外鍵的列存在索引
3、必須指定數(shù)據(jù)表的引擎為 InnoDB
4、外鍵字段和關(guān)聯(lián)字段,數(shù)據(jù)類型必須一致
(二)在創(chuàng)建數(shù)據(jù)表時創(chuàng)建外鍵約束
在創(chuàng)建數(shù)據(jù)表時創(chuàng)建外鍵約束,只需要在創(chuàng)建數(shù)據(jù)表的 create 語句后面,使用 foreign key 關(guān)鍵字指定本表的外鍵字段,使用 reference 關(guān)鍵字指定關(guān)聯(lián)表的關(guān)聯(lián)字段,并且明確約束行為即可。
創(chuàng)建外鍵約束的 SQL 語句示例如下:
create table student (id int(8),name varchar(20),department varchar(20) ,index (id))ENGINE=InnoDB;
create table grade (Sid int(8),Cid int(10),score int,index(Sid),foreign key (Sid) references student(id) on delete restrict on update cascade)ENGINE=InnoDB;
在上述 SQL 語句中,on delete restrict 是指明在刪除時外鍵會對該刪除操作進(jìn)行限制,而 on update cascade 是指名在更新時會對該更新操作進(jìn)行同步。
(三)在創(chuàng)建數(shù)據(jù)表后添加外鍵約束
同樣的,MySQL 也支持在創(chuàng)建數(shù)據(jù)表后再添加外鍵約束。在上例中,我們先刪除 grade 表,然后再創(chuàng)建 grade 表,現(xiàn)不創(chuàng)建外鍵,嘗試在創(chuàng)建 grade 表后添加外鍵,相關(guān) SQL 命令如下:
drop table grade;
create table grade(Sid int(8),Cid int(10),score int);
alter table grade add index(Sid);
alter table grade add foreign key (Sid) references student(id) on delete restrict on update cascade;
執(zhí)行結(jié)果如下:
三、外鍵約束功能演示
下面,我們就來測試一下外鍵約束的功能,首先,嘗試向 grade 表插入一個不存在學(xué)生的成績,發(fā)現(xiàn)被拒絕:
之后,嘗試刪除 student 表中存在成績的學(xué)生,發(fā)現(xiàn)被拒絕:
緊接著,我們測試一下 MySQL 外鍵約束級聯(lián)更新功能,發(fā)現(xiàn),如果更改了 student 表中的數(shù)據(jù),grade 表也會跟著變動,如下所示:
到此,關(guān)于“MySQL 外鍵約束知識點有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>