站長資訊網
        最全最豐富的資訊網站

        MySQL外鍵約束知識點總結

        本篇文章給大家帶來了關于mysql的相關知識,其中主要整理了外鍵約束的相關問題,外鍵約束(Foreign Key)即數據庫中兩個數據表之間的某個列建立的一種聯系,這種聯系通常是以實際場景中含義完全相同的字段所造成的,下面一起來看一下,希望對大家有幫助。

        MySQL外鍵約束知識點總結

        推薦學習:mysql視頻教程

        一、MySQL外鍵約束作用

        外鍵約束(Foreign Key)即數據庫中兩個數據表之間的某個列建立的一種聯系。這種聯系通常是以實際場景中含義完全相同的字段所造成的。MySQL通過外鍵約束的引入,可以使得數據表中的數據完整性更強,也更符合顯示情況。下面,我舉一個例子來說明MySQL外鍵約束的作用。
        假如我們對大學學生成績管理系統建立數據庫,有兩張表,一張表是學生表,存儲了學生的學號、姓名、性別、院系等信息,還有一張表是成績表,存儲了學生學號、課程編號、考試成績等信息。這樣,這兩張表之間就會通過學生學號建立外鍵約束。很自然的我們想到,成績表的學生學號依賴于學生表的學生學號存在,如果一個學生畢業、或者退學,從學生表中刪除時,那么他的相關成績也就沒有必要在成績表中存在了。在沒有創建外鍵關系之前,這兩張表完全是獨立存在的,我們可以強行在成績表中插入一個不存在學生的相關成績,也可以強行刪除學生表中的一個學生,并且不管其成績信息是否在成績表中存在。但是,在建立外鍵關系后,MySQL數據庫會約束上述兩種行為,每次對數據進行插入或者刪除時,都會檢查數據完整性,使得我們的操作必須符合實際情況。

        二、外鍵約束創建

        (一)創建外鍵約束的條件

        MySQL數據庫外鍵的創建,需要滿足以下四個條件,否則會被MySQL數據庫拒絕:
        1、創建外鍵的表和列存在
        2、組成外鍵的列存在索引
        3、必須指定數據表的引擎為InnoDB
        4、外鍵字段和關聯字段,數據類型必須一致

        (二)在創建數據表時創建外鍵約束

        在創建數據表時創建外鍵約束,只需要在創建數據表的create語句后面,使用foreign key關鍵字指定本表的外鍵字段,使用reference關鍵字指定關聯表的關聯字段,并且明確約束行為即可。
        創建外鍵約束的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 是指明在刪除時外鍵會對該刪除操作進行限制,而on update cascade是指名在更新時會對該更新操作進行同步。

        (三)在創建數據表后添加外鍵約束

        同樣的,MySQL也支持在創建數據表后再添加外鍵約束。在上例中,我們先刪除grade表,然后再創建grade表,現不創建外鍵,嘗試在創建grade表后添加外鍵,相關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;

        執行結果如下:

        MySQL外鍵約束知識點總結

        三、外鍵約束功能演示

        下面,我們就來測試一下外鍵約束的功能,首先,嘗試向grade表插入一個不存在學生的成績,發現被拒絕:

        MySQL外鍵約束知識點總結
        之后,嘗試刪除student表中存在成績的學生,發現被拒絕:

        MySQL外鍵約束知識點總結
        緊接著,我們測試一下MySQL外鍵約束級聯更新功能,發現,如果更改了student表中的數據,grade表也會跟著變動,如下所示:

        MySQL外鍵約束知識點總結

        推薦學習:mysql視頻教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲精品无码不卡在线播放HE| 国内精品视频九九九九| 日韩精品一区二区三区大桥未久| 黄床大片免费30分钟国产精品| 国产精品久久久久国产A级| 久久久久99精品成人片| 黑人精品videos亚洲人| 久久精品国产亚洲av麻豆色欲 | 日产欧美国产日韩精品| 欧美在线精品永久免费播放| 国产精品人人做人人爽人人添| 98视频精品全部国产| 欧美精品欧美人与动人物牲交| 日本一区二区三区精品国产 | 亚洲精品欧美综合| 99久久精品国产免看国产一区| 午夜天堂精品久久久久| 在线精品自拍无码| 无码精品人妻一区二区三区AV| 国产亚洲精品精品国产亚洲综合| 99亚洲精品视频| 高清日韩精品一区二区三区| 四虎永久在线精品884aa下载| 国产高清在线精品二区一| 国产精品水嫩水嫩| 久久国产精品99国产精| 久久精品人人做人人爽97 | 日韩精品成人亚洲专区| 久久狠狠一本精品综合网| 国产精品一级AV在线播放| 成人精品视频成人影院| 欧美日激情日韩精品| 亚洲综合精品一二三区在线 | 精品人妻中文av一区二区三区 | 夜夜精品无码一区二区三区| 四虎国产精品成人免费久久| 欧美精品丝袜久久久中文字幕| 欧美亚洲综合免费精品高清在线观看| 人妻无码久久精品| 亚洲中文字幕无码久久精品1| 无码人妻丰满熟妇精品区|