MySQL外鍵約束

InnoDB類型表有一個其他存儲引擎不支持的特性——外鍵約束。

當B表的外鍵關聯到A表的主鍵時(表B是父表A表的子表),如果刪除了A表,那麼B中的外鍵則仍然關聯着一個不存在的表的主鍵。而外鍵約束則設定了當約束被破壞時應該應用的的規則,包括防止約束破壞。


創建一個外鍵約束的語法是:

FOREIGN KEY(item_name)REFERENCES table (column)

table(column)子句是約束該外鍵的父表列的引用,該語句只是標識了關係,並沒有說明約束被破壞時如何操作。


語句後面附上內容來決定觸發什麼動作:

ON DELETE action

ON UPDATE action

其中action總共有5個動作可選

(1)RESTRICT:不指定任何動作

(2)NO ACTION:不指定任何動作

(3)SET DEFAULT:

(4)CASCADE:最有用的選項。刪除父記錄將導致那個以父ID作爲外鍵的子記錄也被刪除

(5)SET NULL:刪除父記錄將導致子表中相應的外鍵被設置爲NULL,如果該表的列定義爲NOT NULL(大部分情況是這樣),刪除父記錄將引發一個錯誤

注意

由於只有InnoDB表類型的表支持外鍵約束,所以相關聯的兩個表都必須是InnoDB類型。

此外,爲了MySQL能夠比較外鍵和主鍵的值,相關的列必須是相同類型的。比如:數字列的大小必須相同;文本列的字符集和校對規則必須相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章