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

MySQL  外鍵(foreign key)約束的作用和使用

 更新時(shí)間:2023年09月26日 10:00:11   作者:永遠(yuǎn)是少年啊  
外鍵約束是用于建立兩個(gè)表之間關(guān)系的一種約束,本文主要介紹了MySQL外鍵約束詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

什么是外鍵約束?

外鍵:用來讓兩張表的數(shù)據(jù)之間建立連接,從而保證數(shù)據(jù)的一致性和完整性。

外鍵約束是用于建立兩個(gè)表之間關(guān)系的一種約束,它定義了一個(gè)表中的列與另一個(gè)表中的列之間的關(guān)系。外鍵約束可以保證數(shù)據(jù)的完整性和一致性,確保表與表之間的關(guān)系得到正確維護(hù)

外鍵約束的使用方法

基本語法:

-- 創(chuàng)建表時(shí)添加外鍵
create table 表名(
字段名 數(shù)據(jù)類型,
...
[constraint] [外鍵名稱] foreign key (外鍵字段名) references 主表 (主表列名)
);
-- 單獨(dú)添加外鍵
alter table 表名 add constraint 外鍵名稱 foreign key (外鍵字段名)
references 主表 (主表列名) ;
-- 刪除外鍵
alter table 表名 drop foreign key 外鍵名稱;

外鍵產(chǎn)生的行為(刪除/更新行為)

添加了外鍵之后,再刪除父表數(shù)據(jù)時(shí)產(chǎn)生的約束行為,我們就稱為刪除/更新行為。具體的刪除/更新行為有以下幾種:

行為說明
no action當(dāng)在父表(主表)中刪除/更新對應(yīng)記錄時(shí),首先檢查該記錄是否有對應(yīng)外鍵,如果有則不允許刪除/更新。 (與 RESTRICT 一致) 默認(rèn)行為
restrict當(dāng)在父表中刪除/更新對應(yīng)記錄時(shí),首先檢查該記錄是否有對應(yīng)外鍵,如果有則不
允許刪除/更新。 (與 NO ACTION 一致) 默認(rèn)行為
cascade當(dāng)在父表中刪除/更新對應(yīng)記錄時(shí),首先檢查該記錄是否有對應(yīng)外鍵,如果有,則
也刪除/更新外鍵在子表中的記錄。
set null當(dāng)在父表中刪除對應(yīng)記錄時(shí),首先檢查該記錄是否有對應(yīng)外鍵,如果有則設(shè)置子表
中該外鍵值為null(這就要求該外鍵允許取null)。
set default父表有變更時(shí),子表將外鍵列設(shè)置成一個(gè)默認(rèn)的值 (Innodb不支持)

可以添加行為:

-- 設(shè)置update和delete為cascade行為
alter table 表名 add constraint 外鍵名稱 foreign key (外鍵字段) references 
主表名 (主表字段名) on update cascade on delete cascade;

實(shí)例介紹

假設(shè)有兩個(gè)表: students (學(xué)生表)和 courses (課程表)。每個(gè)學(xué)生可以選擇多門課程,因此我們希望通過外鍵約束來確保學(xué)生表中的 course_id 列與課程表中的 course_id 列保持一致。

1. 數(shù)據(jù)完整性:通過外鍵約束,我們可以確保學(xué)生表中的 course_id 列只引用了課程表中存在的有效 course_id 值。這樣可以防止無效的或不存在的課程ID被插入到學(xué)生表中,保證數(shù)據(jù)的完整性。

2. 數(shù)據(jù)一致性:外鍵約束可以確保學(xué)生表中的 course_id 列與課程表中的 course_id 列保持一致。如果在課程表中更新或刪除了某門課程的記錄,外鍵約束會自動處理相關(guān)的學(xué)生表中的數(shù)據(jù),以保持?jǐn)?shù)據(jù)的一致性。

3. 數(shù)據(jù)查詢和關(guān)聯(lián):使用外鍵約束可以簡化數(shù)據(jù)查詢和關(guān)聯(lián)操作。通過外鍵關(guān)聯(lián),我們可以輕松地從學(xué)生表中獲取與特定課程相關(guān)的學(xué)生信息,或者從課程表中獲取與特定學(xué)生相關(guān)的課程信息。

注意事項(xiàng)

1. 外鍵約束只能在InnoDB存儲引擎下使用,因此需要確保表使用的是InnoDB引擎。

2. 外鍵列和主鍵列的數(shù)據(jù)類型和長度必須相同,否則無法建立外鍵約束。

3. 當(dāng)刪除或更新主表中的數(shù)據(jù)時(shí),需要謹(jǐn)慎選擇ON DELETE和ON UPDATE子句,以確保從表中的數(shù)據(jù)處理方式符合業(yè)務(wù)需求。

4. 外鍵約束可能會影響數(shù)據(jù)庫的性能,特別是在大量數(shù)據(jù)插入或更新時(shí)。因此,在設(shè)計(jì)數(shù)據(jù)庫時(shí),需要權(quán)衡使用外鍵約束的必要性和性能影響。

到此這篇關(guān)于MySQL  外鍵(foreign key)約束的作用和使用的文章就介紹到這了,更多相關(guān)Mysql外鍵約束內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論