MySQL 8.3 Release Notes
外键允许您跨表引用相关数据,并且外键约束帮助保持这种分布式数据的一致性。
MySQL支持CREATE TABLE
和ALTER TABLE
语句中的ON UPDATE
和ON DELETE
外键引用。可用的参照操作是RESTRICT
、CASCADE
、SET NULL
和NO ACTION
(默认)。
SET DEFAULT
也被MySQL Server支持,但当前被InnoDB
拒绝为无效。由于MySQL不支持延迟约束检查,NO ACTION
被视为RESTRICT
。有关MySQL支持的外键语法,请参见第15.1.20.5节,“外键约束”。
MATCH FULL
、MATCH PARTIAL
和MATCH SIMPLE
是允许的,但它们的使用应该避免,因为它们会导致MySQL Server忽略同一语句中的任何ON DELETE
或ON UPDATE
子句。MATCH
选项在MySQL中没有其他效果,实际上强制执行MATCH SIMPLE
语义。
MySQL要求外键列被索引;如果您创建了一个带有外键约束的表,但没有在给定列上创建索引,MySQL将创建一个索引。
您可以从信息模式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
表支持外键。