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