外键让您可以跨表交叉引用相关数据, 而外键约束有助于保持这种分散的数据的一致性。
MySQL 支持and
语句中的ON UPDATE
andON
DELETE
外键引用
。可用的参考操作有
(默认)、、和。
CREATE TABLE
ALTER TABLE
RESTRICT
CASCADE
SET
NULL
NO ACTION
NDB
不支持
ON UPDATE CASCADE
引用列是父表主键的操作。
SET DEFAULT
也受 MySQL 服务器支持,但目前被
InnoDB
和
拒绝为无效NDB
。由于 MySQL 不支持延迟约束检查,NO ACTION
因此被视为RESTRICT
. 有关 MySQL 支持的外键的确切语法,请参阅
第 13.1.17.5 节,“外键约束”。
MATCH FULL
, MATCH
PARTIAL
, 和MATCH SIMPLE
是允许的,但应避免使用它们,因为它们会导致 MySQL 服务器忽略同一语句中使用的任何ON DELETE
or
子句。选项在 MySQL 中没有任何其他效果,它实际上全时强制执行语义。
ON UPDATE
MATCH
MATCH
SIMPLE
MySQL 要求对外键列进行索引;如果您创建一个具有外键约束但在给定列上没有索引的表,则会创建一个索引。 例外:NDB Cluster 需要外键列上的显式唯一键(或主键)。
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_SYS_FOREIGN
和
INNODB_SYS_FOREIGN_COLS
表中找到。INFORMATION_SCHEMA