mysql 外來鍵詳解 MySQL的外來鍵約束詳解

2021-10-19 17:15:25 字數 1894 閱讀 8701

外來鍵的作用:

主要作用有兩個,乙個保證資料的完整性和一致性,乙個是方便一些er圖生成工具生成更具可讀性的er圖。

注意:引入外來鍵可能會導致效能下降

mysql中的外來鍵

mysql有兩種常用的引擎型別:myisam和innodb。目前只有innodb引擎型別支援外來鍵約束。innodb中外鍵約束定義的語法如下:

[constraint [symbol]] foreign key

[index_name] (index_col_name, ...)

references tbl_name (index_col_name,...)

[on delete reference_option]

[on update reference_option]

reference_option:

restrict | cascade | set null | no action  外來鍵的使用需要滿足下列的條件:

1. 兩張表必須都是innodb表,並且它們沒有臨時表。

2. 建立外來鍵關係的對應列必須具有相似的innodb內部資料型別。

3. 建立外來鍵關係的對應列必須建立了索引。

4. 假如顯式的給出了constraint symbol,那symbol在資料庫中必須是唯一的。假如沒有顯式的給出,innodb會自動的建立。

如果子表試圖建立乙個在父表中不存在的外鍵值,innodb會拒絕任何insert或update操作。如果父表試圖update或者delete任何子表中存在或匹配的外鍵值,最終動作取決於外來鍵約束定義中的on update和on delete選項。innodb支援5種不同的動作,如果沒有指定on delete或者on update,預設的動作為restrict:

1. cascade: 從父表中刪除或更新對應的行,同時自動的刪除或更新自表中匹配的行。on delete canscade和on update canscade都被innodb所支援。

2. set null: 從父表中刪除或更新對應的行,同時將子表中的外來鍵列設為空。注意,這些在外鍵列沒有被設為not null時才有效。on delete set null和on update set set null都被innodb所支援。

3. no action: innodb拒絕刪除或者更新父表。

4. restrict: 拒絕刪除或者更新父表。指定restrict(或者no action)和忽略on delete或者on update選項的效果是一樣的。

5. set default: innodb目前不支援。

外來鍵約束使用最多的兩種情況無外乎:

1)父表更新時子表也更新,父表刪除時如果子表有匹配的項,刪除失敗;

2)父表更新時子表也更新,父表刪除時子表匹配的項也刪除。

前一種情況,在外鍵定義中,我們使用on update cascade on delete restrict;後一種情況,可以使用on update cascade on delete cascade。

innodb允許你使用alter table在乙個已經存在的表上增加乙個新的外來鍵:

alter table tbl_name

add [constraint [symbol]] foreign key

[index_name] (index_col_name, ...)

references tbl_name (index_col_name,...)

[on delete reference_option]

[on update reference_option]

innodb也支援使用alter table來刪除外來鍵:

alter table tbl_name drop foreign key fk_symbol;

結尾:使用外來鍵可以保證資料的完整性,一致性,方便資料的維護,同時他也會帶來效能的下降,用與不用在於權衡。

MySql外來鍵詳解

1 外來鍵的使用 外來鍵的作用,主要有兩個 乙個是讓資料庫自己通過外來鍵來保證資料的完整性和一致性 乙個就是能夠增加er圖的可讀性 有些人認為外來鍵的建立會給開發時運算元據庫帶來很大的麻煩.因為資料庫有時候會由於沒有通過外來鍵的檢測而使得開發人員刪除,插入操作失敗.他們覺得這樣很麻煩 其實這正式外來...

mysql外來鍵詳解

1.1 mysql 中 鍵 和 索引 的定義相同,所以外來鍵和主鍵一樣也是索引的一種。不同的是 mysql 會自動為所有表的主鍵進行索引,但是外來鍵字段必須由使用者進行明確的索引。用於外來鍵關係的字段必須在所有的參照表中進行明確地索引,innodb 不能自動地建立索引。2.2 外來鍵可以是一對一的,...

mysql外來鍵教程 MySQL外來鍵使用詳解

最近有開始做乙個實驗室管理系統,因為分了幾個表進行儲存 所以要維護表間的關聯 研究了一下mysql的外來鍵 1 只有innodb型別的表才可以使用外來鍵,mysql預設是myisam,這種型別不支援外來鍵約束 2 外來鍵的好處 可以使得兩張表關聯,保證資料的一致性和實現一些級聯操作 3 外來鍵的作用...