1.7.3.2 外键约束

外键让您可以跨表交叉引用相关数据, 而外键约束有助于保持这种分散的数据的一致性。

MySQL 支持and 语句中的ON UPDATEandON DELETE外键引用 。可用的参考操作有 (默认)、、和。 CREATE TABLEALTER TABLERESTRICTCASCADESET NULLNO ACTION

SET DEFAULT也受 MySQL 服务器支持,但目前被拒绝为无效 InnoDB。由于 MySQL 不支持延迟约束检查,NO ACTION因此被视为RESTRICT. 有关 MySQL 支持的外键的确切语法,请参阅 第 13.1.18.5 节,“外键约束”

MATCH FULL, MATCH PARTIAL, 和MATCH SIMPLE是允许的,但应避免使用它们,因为它们会导致 MySQL 服务器忽略同一语句中使用的任何ON DELETEor 子句。选项在 MySQL 中没有任何其他效果,它实际上全时强制执行语义。 ON UPDATEMATCHMATCH 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_SYS_FOREIGNINNODB_SYS_FOREIGN_COLS表中找到。INFORMATION_SCHEMA

InnoDBNDB表支持外键。