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能够比较外键和主键的值,相关的列必须是相同类型的。比如:数字列的大小必须相同;文本列的字符集和校对规则必须相同。

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