mysql怎麼給外來鍵約束加名字 Mysql外來鍵約束

2021-10-17 11:59:55 字數 1722 閱讀 6833

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約束與外來鍵 MySQL 外來鍵與約束

外來鍵的建立 建表如下 create table parent id int not null,primary key id type innodb create table child id int,parent id int,foreign key parent id references pa...

MySQL 外來鍵約束

建立測試主表.id 是主鍵.create table test main id int,value varchar 10 primary key id 建立測試子表.create table test sub id int,main id int,value varchar 10 primary k...

MySQL外來鍵約束

innodb型別表有乙個其他儲存引擎不支援的特性 外來鍵約束。當b表的外來鍵關聯到a表的主鍵時 表b是父表a表的子表 如果刪除了a表,那麼b中的外來鍵則仍然關聯著乙個不存在的表的主鍵。而外鍵約束則設定了當約束被破壞時應該應用的的規則,包括防止約束破壞。建立乙個外來鍵約束的語法是 foreign ke...