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
表支持外键。