no action
指定如果試圖刪除/修改某一行,而該行的鍵被其他表的現有行中的外來鍵所引用,則產生錯誤並回滾 delete/update語句。
cascade、set null 和 set default
允許通過刪除或更新鍵值來影響指定具有外來鍵關係的表,這些外來鍵關係可追溯到在其中進行修改的表。如果為目標表也定義了級聯引用操作,那麼指定的級聯操作也將應用於刪除或更新的那些行。不能為具有 timestamp 列的外來鍵或主鍵指定 cascade。
on delete cascade
指定如果試圖刪除某一行,而該行的鍵被其他表的現有行中的外來鍵所引用,則也將刪除所有包含那些外來鍵的行。
on update cascade
指定如果試圖更新某一行中的鍵值,而該行的鍵值被其他表的現有行中的外來鍵所引用,則組成外來鍵的所有值也將更新到為該鍵指定的新值。 (如果 timestamp 列是外來鍵或被引用鍵的一部分,則不能指定 cascade。 )
on delete set null
指定如果試圖刪除某一行,而該行的鍵被其他表的現有行中的外來鍵所引用,則組成被引用行中的外來鍵的所有值將被設定為 null。目標表的所有外來鍵列必須可為空值,此約束才可執行。
on delete set default
指定如果試圖刪除某一行,而該行的鍵被其他表的現有行中的外來鍵所引用,則組成被引用行中的外來鍵的所有值將被設定為它們的預設值。目標表的所有外來鍵列必須具有預設值定義,此約束才可執行。如果某個列可為空值,並且未設定顯式的預設值,則會使用 null 作為該列的隱式預設值。因 on delete set default 而設定的任何非空值在主表中必須有對應的值,才能維護外來鍵約束的有效性。
on update set default
指定如果試圖更新某一行,而該行的鍵被其他表的現有行中的外來鍵所引用,則組成被引用行中的外來鍵的所有值將被設定為它們的預設值。目標表的所有外來鍵列必須具有預設值定義,此約束才可執行。如果某個列可為空值,並且未設定顯式的預設值,則會使用 null 作為該列的隱式預設值。因 on update set default 而設定的任何非空值在主表中必須有對應的值,才能維護外來鍵約束的有效性。
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...