1.7.3.2外部关键约束
外键使您可以跨表交叉引用相关数据, 外键约束有助于保持此扩展数据的一致性。
MySQL支持ON UPDATE和ON DELETE外键的引用 CREATE TABLE和 ALTER TABLE声明。可用参照动作RESTRICT, CASCADE,SET NULL,和 NO ACTION(默认值)。
SET DEFAULTMySQL服务器也支持,但是当前被拒绝为无效服务器 InnoDB。由于MySQL不支持延迟约束检查,NO ACTION因此将其视为RESTRICT。有关MySQL支持的外键确切语法,请参见 第13.1.20.5节“外键约束”。
MATCH FULL,,MATCH PARTIAL和MATCH SIMPLE被允许,但应避免使用它们,因为它们会导致MySQL Server忽略同一语句中使用的任何ON DELETEor ON UPDATE子句。MATCHoptions在MySQL中没有任何其他作用,实际上会MATCH SIMPLE全时强制执行语义。
MySQL要求对外键列进行索引;如果创建具有外键约束但在给定列上没有索引的表,则会创建一个索引。
您可以从INFORMATION_SCHEMA.KEY_COLUMN_USAGE 表中获取有关外键的信息 。此处显示了针对该表的查询示例:
mysql> SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME
> FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
> WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL;
+--------------+---------------+-------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME |
+--------------+---------------+-------------+-----------------+
| fk1 | myuser | myuser_id | f |
| fk1 | product_order | customer_id | f2 |
| fk1 | product_order | product_id | f1 |
+--------------+---------------+-------------+-----------------+
3 rows in set (0.01 sec)
有关InnoDB 表上外键的信息也可以在数据库的INNODB_FOREIGN和 INNODB_FOREIGN_COLS表中找到 INFORMATION_SCHEMA。
InnoDB和NDB表支持外键。

浙公网安备 33010602011771号