外來鍵(Foreign Key)約束。

2021-09-30 15:44:16 字數 1771 閱讀 6417

外來鍵的作用:

保持資料一致性,完整性,主要目的是控制儲存在外鍵表中的資料。 使兩張表形成關聯,外來鍵只能引用外表中的列的值!

用於建立和加強兩個表資料之間的鏈結的一列或多列。通過將儲存表中主鍵值的一列或多列新增到另乙個表中,可建立兩個表之間的鏈結。這個列就成為第二個表的外來鍵。

foreign key 約束的主要目的是控制儲存在外鍵表中的資料,但它還可以控制對主鍵表中資料的修改。當更新主鍵的列值時,與之相關聯的外來鍵的列值也將被做相同的更新。如果主鍵表中資料的更改使之與外來鍵表中資料的鏈結失效,則這種更改是不能實現的,從而確保了引用完整性。如果試圖刪除主鍵表中的行或更改主鍵值,而該主鍵值與另乙個表的 foreign key 約束值相關,則該操作不可實現。若要成功更改或刪除 foreign key 約束的行,可以先在外鍵表中刪除外來鍵資料或更改外來鍵資料,然後將外來鍵鏈結到不同的主鍵資料上去。

外來鍵是用來控制資料庫中資料的資料完整性的,就是當你對乙個表的資料進行操作和他有關聯的乙個或更多表的資料能夠同時發生改變。這就是外來鍵的作用

注意事

·如果在 foreign key 約束的列中輸入非 null值,則此值必須在被引用的列中存在,否則將返回違反外來鍵約束的錯誤資訊。

·foreign key 約束應用於前面所講的列,除非指定了源列。

·foreign key 約束僅能引用位於同一伺服器上的同一資料庫中的表。資料庫間的引用完整性必須通過觸發器實現。有關更多資訊,請參見create trigger。

·foreign key 可以引用同一表中的其它列(自引用)

·列級 foreign key 約束的 references子句僅能列出乙個引用列,且該列必須與定義約束的列具有相同的資料型別。

·表級 foreign key 約束的 references子句中引用列的數目必須與約束列列表中的列數相同。每個引用列的資料型別也必須與列表中相應列的資料型別相同。

·如果timestamp型別的列是外來鍵或被引用鍵的一部分,則不能指定 cascade。

·可以在相互間具有引用關係的表上組合使用 cascade 和 no action。如果 sql server遇到 no action,將終止執行語句並回滾相關的 cascade操作。當 delete 語句導致 cascade和 no action 組合操作時,在 sql server檢查 no action 操作之前將執行所有 cascade操作。

·乙個表最多可包含 253 個 foreign key約束。

·對於臨時表不強制 foreign key 約束。

·每個表在其 foreign key 約束中最多可以引用 253個不同的表。

·foreign key 約束只能引用被引用表的 primary key或 unique 約束中的列或被引用表上 unique index中的列。

使用:

[constraint constraint_name][foreign key] references ref_table[(ref_column)][on delete] [on update]

references:

指定要建立關聯的表的資訊

ref_table:

指定要建立關聯表的名稱

ref_column:

指定要建立關聯表中的相關聯的列的名稱。

foreign key 外來鍵 建立 刪除

注意 支援外來鍵表的型別是 innodb 建立外來鍵語法 alter table 表名 add constraint 外來鍵名稱 起名字 foreign key 外來鍵欄位名 r eferences 外表表名 主鍵欄位名 例項 建立表 grade student 型別innodb alter tab...

mysql外來鍵 foreign key 的用法

在mysql中myisam和innodb儲存引擎都支援外來鍵 foreign key 但是myisam只能支援語法,卻不能實際使用。下面通過例子記錄下innodb中外鍵的使用方法 建立主表 mysql create table parent id int not null,primary key i...

mysql外來鍵 foreign key 的用法

在mysql中myisam和innodb儲存引擎都支援外來鍵 foreign key 但是myisam只能支援語法,卻不能實際使用。下面通過例子記錄下innodb中外鍵的使用方法 建立主表 mysql create table parent id int not null,primary key i...