資料庫學習筆記和小練習(16)外來鍵再理解

2021-07-24 15:43:24 字數 2125 閱讀 5302

一、外來鍵

在關係型資料庫中,基本的物件就是表(關係),每個表都維護了一定的資訊。但是,生活中的資訊不是簡單地,分離的,資訊之間一定會有著這樣那樣的聯絡,相對應的,我們的表之間也應該有所聯絡。

舉個例子:學生表在我們前面的例子中出現的不少,它描述了學生資訊,比如包括了他所在系,那麼,它所在的系就確定了。但是是不是乙個系名就完全描述了這個系的資訊呢?顯然是不夠的,比如系主任的名字等等關於系的資訊,這一部分資訊不應該放在學生表中,而應該在乙個描述系資訊的表中。但是,學生表可能會需要系的一些詳細資訊(它們的資訊確實是相關聯的)

所以對於學生表的乙個屬性(系),通過這個屬性可以聯絡到乙個係表(要求繫在係表中是主鍵)否則,這種聯絡是不唯一是混亂的(乙個學生不可能在兩個系)。

所以:如果公共關鍵字在乙個關係中是主鍵,那麼這個公共關鍵字被稱為另乙個關係的外來鍵(一張表的乙個非主鍵字段指向另一張表的主鍵)。由此可見,外來鍵表示了兩個關係之間的相關聯絡。以另乙個關係的外來鍵作主關鍵字的表被稱為主表(父表)(被參照表),具有此外鍵的表被稱為主表的從表(子表)(參照表)。

在這個關係中:我們的子表(參照表)參照父表(被參照表),也即是說,現在是子表(學生表)需要父表(係表),被需要的人往往更被依賴,更有地位,也更有責任(就像父親一樣),而這種關係也將產生外來鍵約束

建立外來鍵:

create table spj

(sno char(3),

pno char(3),

jno char(3),

qty int,

primary key(sno,pno,jno),

foreign key (sno) references s(sno),

foreign key (pno) references p(pno),foreign key (jno) references j(jno))charset gbk;

基本語法: foreign key  (本張表中的那個非主鍵) references 被參照表(被參照表的被參照列,也是被參照表的主鍵)。

增加外來鍵:

alter table 表名 add

[constraint 外鍵名字]

foreign key(外來鍵字段)

references 父表(主鍵字段)

[constraint 外鍵名字]可選,可以給外來鍵取名字。

修改外來鍵:

外來鍵不可修改,只能先刪除後新增

alter table 表名 drop

foreign key

外鍵名;

#注意:

子表外來鍵的字段型別和父表主鍵的字段型別需要相同(列名不一定相同)

一張表可以有多個外來鍵(但是名字不能相同)

二、外來鍵約束

把握住乙個核心父表不能比子表小(父表子表通過外來鍵是一一關聯的,也即是說不能有子表有,父表沒有的情況)

所以:子表插入父表沒有的記錄會失敗,否則子表就比父表大了。(學生在乙個不存在的系)

所以:子表更新後的記錄父表沒有會失敗,否則子表就比父表大了(學生改到了乙個不存在的系)

所以:父表不能刪除乙個子表有的記錄,否則父表就比子表小了(學生都沒繫了)

所以:父表更新乙個記錄,導致子表有記錄在父表中找不到公共屬性值相等的記錄,否則父表就比子表小了(有學生沒繫)

小結:我們有可能有乙個系卻沒有學生,也即是說以上操作反之能成立,比如父表插入(父錶比子表大)

但是卻不可能乙個系都不存在,有學生卻是這個不存在的系的。

#注意以上不允許的操作發生的時候,預設拒絕操作(district)但是也可能:

1.級聯操作(cascade)

比如刪除\更新乙個系,把原來學生表中對應系的記錄全部刪除\更新

2.設定為空值(set null)

比如刪除\更新乙個系,把原來學生表中對應系的記錄的外來鍵設定為空(表示系已刪除)

(外來鍵字段如果是聯合主鍵的一部分,是不能被置空的,即前提條件是可以置空)

(指定的時候不滿足,會無法建立)

以上在建立外來鍵的時候指明:

foreign key (主鍵字段) references 父表(主鍵字段)

on delete set null

on update cascade,

刪除的時候置空,更新的時候級聯操作。

資料庫 外來鍵

外來鍵是什麼?外來鍵 fk 是用於建立和加強兩個表資料之間的鏈結的一列或多列。通過將儲存表中主鍵值的一列或多列新增到另乙個表中,可建立兩個表之間的鏈結。這個列就成為第二個表的外來鍵。外來鍵資料庫一級的完整性約束,由資料庫自行維護.你也可以手動建立.1如果存在外來鍵關係的話,任何修改主表主鍵欄位和刪除...

資料庫外來鍵

主鍵 能夠唯一標識表中某一行的屬性或屬性組。乙個表只能有乙個主鍵,但是可以有多個索引。主鍵常常與外來鍵構成完整性約束,防止出現資料的不一致,資料庫管理系統對於主鍵自動生成唯一索引,所以主鍵是乙個特殊的索引。外來鍵 用於建立和加強兩個表資料之間的連線的一列或者多列。外來鍵主要是用來維護兩個表之間的資料...

資料庫外來鍵

概念 table2的乙個鍵關聯table1的主鍵 foreign key 作用 保持資料的一致性和完整性 表的字段必須與外來鍵型別相同 insert table2的時候會檢查foreign key是否在table1中存在,不存在則返回失敗 delete table1某行資料的時候檢查table2中是...