MySQL 簡述MySQL外來鍵約束

2021-09-08 16:06:48 字數 1908 閱讀 7923

mysql有兩種常用的引擎型別:myisam和innodb。目前只有innodb引擎型別支援外來鍵約束。

一、外來鍵約束的含義:

1. 外來鍵約束對子表的含義:當在子表中insert或update一條資料時,如果在主表中找不到候選鍵,那麼就不允許該操作。

2. 外來鍵約束對主表的含義:當在主表中insert或update資料時,如果主表的候選鍵對應的有子表的外鍵值,那麼就不允許該操作。

二、外來鍵約束的使用條件:

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

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

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

三、外來鍵約束的動作:

如果子表試圖建立乙個在父表中不存在的外鍵值,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)父表更新時子表也更新,父表刪除時如果子表有匹配的項,刪除失敗。 此情況,在外鍵定義中,我們使用on update cascade on delete restrict。

2)父表更新時子表也更新,父表刪除時子表匹配的項也刪除。此情況,在外鍵定義中,我們使用on update cascade on delete cascade。

四、 外來鍵約束的操作

1. 外來鍵約束的啟動

set foreign_key_checks = 1;
2. 外來鍵約束的禁用

set foreign_key_checks = 0;
3. 外來鍵約束的建立

建立外來鍵約束有兩種方式:可在建立表的時候直接建立外來鍵約束;也可以建立完錶後再新增外來鍵約束。

create table table_name  (

欄位名1 字段屬性1,

欄位名2 字段屬性2,

欄位名3 字段屬性3,

[add constraint 外來鍵name] foreign key (欄位名) references 主表(主表主鍵名)

);create table table_name (

欄位名1 字段屬性1,

欄位名2 字段屬性2,

欄位名3 字段屬性3

);alter table table_name add constraint 外來鍵name foreign key (欄位名) references 主表(主表主鍵名);

4.外來鍵約束的刪除

alter table table_name drop  外來鍵name;

mysql 外來鍵 del 記錄 MySQL 外來鍵

在mysql中 1 mysql 資料表主要支援六種型別 分別是 bdb heap isam merge myisam innobdb。這六種又分為兩類,一類是 事務安全型 transaction safe 包括bdb和innodb 其餘都屬於第二類,稱為 非事務安全型 non transaction...

mysql副鍵 mysql外來鍵

外來鍵是為了保證資料的完整性,但也會帶來許多 使用不當會使資料處理變得複雜,在資料量大的時候會明顯影響效能。所以,工具是工具,具體如何使用,根據自己情況取捨。注意 目前在mysql資料庫中,只有innodb儲存引擎支援外來鍵。外來鍵定義 兩個有關聯關係的表,其中乙個表中的某個欄位a指向另乙個表中的主...

mysql級聯刪除外來鍵約束 主外來鍵和外來鍵約束

主鍵 primary key 一列 或一組列 其值能夠唯一區分表中每個行 外來鍵 foreign key 外來鍵為某個表中的一列,它包含另乙個表的主鍵值,定義了兩個表之間的關係 右邊的departmentid是外來鍵。外來鍵約束是指用於在兩個表之間建立關係,需要指定引用主表的哪一列。on delet...