外键使您可以跨表交叉引用相关数据, 外键约束有助于保持此扩展数据的一致性。
MySQL支持ON UPDATE
和ON DELETE
外键的引用 CREATE TABLE
和 ALTER TABLE
声明。可用参照动作RESTRICT
, CASCADE
,SET NULL
,和 NO ACTION
(默认值)。
SET DEFAULT
MySQL服务器也支持,但是当前被拒绝为无效服务器 InnoDB
。由于MySQL不支持延迟约束检查,NO ACTION
因此将其视为RESTRICT
。有关MySQL支持的外键确切语法,请参见 第13.1.20.5节“外键约束”。
MATCH FULL
,,MATCH PARTIAL
和MATCH SIMPLE
被允许,但应避免使用它们,因为它们会导致MySQL Server忽略同一语句中使用的任何ON DELETE
or ON UPDATE
子句。MATCH
options在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
表支持外键。