欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL外鍵約束(Foreign?Key)案例詳解

 更新時(shí)間:2022年06月28日 12:10:13   作者:永遠(yuǎn)是少年啊  
MySQL外鍵約束(FOREIGN KEY)是表的一個(gè)特殊字段,經(jīng)常與主鍵約束一起使用,下面這篇文章主要給給大家介紹了關(guān)于MySQL外鍵約束(Foreign?Key)的相關(guān)資料,需要的朋友可以參考下

今天繼續(xù)給大家介紹MySQL相關(guān)知識(shí),本文主要內(nèi)容是MySQL外鍵約束詳解。

一、MySQL外鍵約束作用

外鍵約束(Foreign Key)即數(shù)據(jù)庫(kù)中兩個(gè)數(shù)據(jù)表之間的某個(gè)列建立的一種聯(lián)系。這種聯(lián)系通常是以實(shí)際場(chǎng)景中含義完全相同的字段所造成的。MySQL通過(guò)外鍵約束的引入,可以使得數(shù)據(jù)表中的數(shù)據(jù)完整性更強(qiáng),也更符合顯示情況。下面,我舉一個(gè)例子來(lái)說(shuō)明MySQL外鍵約束的作用。

假如我們對(duì)大學(xué)學(xué)生成績(jī)管理系統(tǒng)建立數(shù)據(jù)庫(kù),有兩張表,一張表是學(xué)生表,存儲(chǔ)了學(xué)生的學(xué)號(hào)、姓名、性別、院系等信息,還有一張表是成績(jī)表,存儲(chǔ)了學(xué)生學(xué)號(hào)、課程編號(hào)、考試成績(jī)等信息。這樣,這兩張表之間就會(huì)通過(guò)學(xué)生學(xué)號(hào)建立外鍵約束。很自然的我們想到,成績(jī)表的學(xué)生學(xué)號(hào)依賴于學(xué)生表的學(xué)生學(xué)號(hào)存在,如果一個(gè)學(xué)生畢業(yè)、或者退學(xué),從學(xué)生表中刪除時(shí),那么他的相關(guān)成績(jī)也就沒(méi)有必要在成績(jī)表中存在了。在沒(méi)有創(chuàng)建外鍵關(guān)系之前,這兩張表完全是獨(dú)立存在的,我們可以強(qiáng)行在成績(jī)表中插入一個(gè)不存在學(xué)生的相關(guān)成績(jī),也可以強(qiáng)行刪除學(xué)生表中的一個(gè)學(xué)生,并且不管其成績(jī)信息是否在成績(jī)表中存在。但是,在建立外鍵關(guān)系后,MySQL數(shù)據(jù)庫(kù)會(huì)約束上述兩種行為,每次對(duì)數(shù)據(jù)進(jìn)行插入或者刪除時(shí),都會(huì)檢查數(shù)據(jù)完整性,使得我們的操作必須符合實(shí)際情況。

二、外鍵約束創(chuàng)建

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

MySQL數(shù)據(jù)庫(kù)外鍵的創(chuàng)建,需要滿足以下四個(gè)條件,否則會(huì)被MySQL數(shù)據(jù)庫(kù)拒絕:

1、創(chuàng)建外鍵的表和列存在

2、組成外鍵的列存在索引

3、必須指定數(shù)據(jù)表的引擎為InnoDB

4、外鍵字段和關(guān)聯(lián)字段,數(shù)據(jù)類型必須一致

(二)在創(chuàng)建數(shù)據(jù)表時(shí)創(chuàng)建外鍵約束

在創(chuàng)建數(shù)據(jù)表時(shí)創(chuàng)建外鍵約束,只需要在創(chuàng)建數(shù)據(jù)表的create語(yǔ)句后面,使用foreign key關(guān)鍵字指定本表的外鍵字段,使用reference關(guān)鍵字指定關(guān)聯(lián)表的關(guān)聯(lián)字段,并且明確約束行為即可。

創(chuàng)建外鍵約束的SQL語(yǔ)句示例如下:

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語(yǔ)句中,on delete restrict 是指明在刪除時(shí)外鍵會(huì)對(duì)該刪除操作進(jìn)行限制,而on update cascade是指名在更新時(shí)會(huì)對(duì)該更新操作進(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é)果如下:

三、外鍵約束功能演示

下面,我們就來(lái)測(cè)試一下外鍵約束的功能,首先,嘗試向grade表插入一個(gè)不存在學(xué)生的成績(jī),發(fā)現(xiàn)被拒絕:

之后,嘗試刪除student表中存在成績(jī)的學(xué)生,發(fā)現(xiàn)被拒絕:

緊接著,我們測(cè)試一下MySQL外鍵約束級(jí)聯(lián)更新功能,發(fā)現(xiàn),如果更改了student表中的數(shù)據(jù),grade表也會(huì)跟著變動(dòng),如下所示:

總結(jié)

到此這篇關(guān)于MySQL外鍵約束(Foreign Key)案例詳解的文章就介紹到這了,更多相關(guān)MySQL外鍵約束內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL錯(cuò)誤Forcing close of thread的兩種解決方法

    MySQL錯(cuò)誤Forcing close of thread的兩種解決方法

    這篇文章主要介紹了MySQL錯(cuò)誤Forcing close of thread的兩種解決方法,需要的朋友可以參考下
    2014-11-11
  • Centos7下無(wú)法遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù)的原因與解決

    Centos7下無(wú)法遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù)的原因與解決

    MySQL是由Oracle公司開(kāi)發(fā)的開(kāi)源SQL數(shù)據(jù)庫(kù)管理系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于在Centos7下無(wú)法遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù)的原因與解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-09-09
  • SQL Server 2005 安裝遇到的錯(cuò)誤提示和解決方法

    SQL Server 2005 安裝遇到的錯(cuò)誤提示和解決方法

    在安裝SQL Server 2005時(shí)有時(shí)會(huì)出現(xiàn)意想不到的問(wèn)題,如IIS,性能計(jì)數(shù)器,OWC11,無(wú)法配置外圍應(yīng)用的問(wèn)題,下面筆者分享一下在安裝SQL Server 2005時(shí)常見(jiàn)問(wèn)題解決方法
    2014-01-01
  • MySQL5.7慢查詢?nèi)罩緯r(shí)間與系統(tǒng)時(shí)間差8小時(shí)原因詳解

    MySQL5.7慢查詢?nèi)罩緯r(shí)間與系統(tǒng)時(shí)間差8小時(shí)原因詳解

    這篇文章主要介紹了MySQL5.7慢查詢?nèi)罩緯r(shí)間與系統(tǒng)時(shí)間差8小時(shí)原因詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 一篇文章帶你了解MySQL數(shù)據(jù)庫(kù)約束

    一篇文章帶你了解MySQL數(shù)據(jù)庫(kù)約束

    數(shù)據(jù)庫(kù)中要管理很多數(shù)據(jù),但是這些數(shù)據(jù)是否正確、是否非法,光靠人力來(lái)檢驗(yàn)是遠(yuǎn)遠(yuǎn)不夠的,因此我們想讓數(shù)據(jù)庫(kù)擁有豐富的檢驗(yàn)和校驗(yàn)?zāi)芰?所以便引入了約束,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)約束的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • MySQL數(shù)據(jù)庫(kù)定時(shí)任務(wù)舉例講解

    MySQL數(shù)據(jù)庫(kù)定時(shí)任務(wù)舉例講解

    最近項(xiàng)目里面的后臺(tái)需要用到定時(shí)任務(wù),而MySQL從5.0開(kāi)始自帶了定時(shí)事件操作,所以學(xué)習(xí)下并做下記錄,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)定時(shí)任務(wù)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • mysql 優(yōu)化日記

    mysql 優(yōu)化日記

    mysql 優(yōu)化日記 使用mysql的朋友可以參考下,大家知道如果mysql優(yōu)化與沒(méi)優(yōu)化性能會(huì)相差不少呢。
    2009-07-07
  • MySQL每晚定時(shí)彈出一個(gè)taskeng.exe的解決方法

    MySQL每晚定時(shí)彈出一個(gè)taskeng.exe的解決方法

    這篇文章主要介紹了MySQL每晚定時(shí)彈出一個(gè)taskeng.exe的解決方法,需要的朋友可以參考下
    2018-07-07
  • 詳解MySQL分組排序求Top N

    詳解MySQL分組排序求Top N

    這篇文章主要介紹了詳解MySQL分組排序求Top N的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • MySQL查詢排序與查詢聚合函數(shù)用法分析

    MySQL查詢排序與查詢聚合函數(shù)用法分析

    這篇文章主要介紹了MySQL查詢排序與查詢聚合函數(shù)用法,結(jié)合實(shí)例形式分析了MySQL查詢結(jié)果排序以及查詢聚合函數(shù)相關(guān)使用技巧,需要的朋友可以參考下
    2019-11-11

最新評(píng)論