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...