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能夠比較外鍵和主鍵的值,相關的列必須是相同類型的。比如:數字列的大小必須相同;文本列的字符集和校對規則必須相同。