1.8.3.2 外键约束
外键使您可以跨 table 交叉引用相关数据,并且外键约束帮助保持此扩展数据的一致性。
MySQL 在CREATE TABLE和ALTER TABLE语句中支持ON UPDATE
和ON DELETE
外键引用。可用的参照动作是RESTRICT
(默认值),CASCADE
,SET NULL
和NO ACTION
。
MySQL 服务器也支持SET DEFAULT
,但当前被InnoDB拒绝为SET DEFAULT
无效。由于 MySQL 不支持延迟约束检查,因此NO ACTION
被视为RESTRICT
。有关 MySQL 支持的外键确切语法,请参见第 13.1.18.5 节“外键约束”。
允许MATCH FULL
,MATCH PARTIAL
和MATCH SIMPLE
,但应避免使用它们,因为它们会导致 MySQL Server 忽略同一语句中使用的任何ON DELETE
或ON UPDATE
子句。 MATCH
选项在 MySQL 中没有任何其他作用,实际上会强制全时执行MATCH SIMPLE
语义。
MySQL 要求对外键列进行索引;如果创建具有外键约束但在给定列上没有索引的 table,则会创建一个索引。
您可以从INFORMATION_SCHEMA.KEY_COLUMN_USAGEtable 中获取有关外键的信息。此处显示了针对该 table 的查询示例:
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
table 上的外键的信息也可以在INFORMATION_SCHEMA
数据库的INNODB_SYS_FOREIGN和INNODB_SYS_FOREIGN_COLStable 中找到。
InnoDB
和NDB
table 支持外键。