MySQL 8.4 Release Notes
1.7.3.2 外键约束
外键约束让你在多个表之间建立关联关系,并且外键约束帮助保持这些分散的数据一致性。
MySQL 支持在CREATE TABLE和ALTER TABLE语句中使用ON UPDATE和ON DELETE外键引用。可用的参考操作是RESTRICT、CASCADE、SET NULL和NO ACTION(默认)。
SET DEFAULT也被 MySQL 服务器支持,但当前由InnoDB拒绝。由于 MySQL 不支持延迟约束检查,NO ACTION被视为RESTRICT。关于 MySQL 对外键的精确语法,请见第15.1.20.5节,“FOREIGN KEY Constraints”。
MATCH FULL, MATCH PARTIAL, 和 MATCH SIMPLE 是允许的,但是他们的使用应该避免,因为它们会使 MySQL 服务器忽略同一语句中的 ON DELETE 或 ON UPDATE 子句。MATCH 选项在 MySQL 中没有其他效果,实际上强制执行 MATCH SIMPLE 模式。
MySQL 需要外键列被索引;如果您创建了一个表,但没有对某个列创建索引,MySQL 会自动创建索引。
您可以从信息_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 表支持外键。