Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

1.6.3.2 外键约束

外键允许您跨表引用相关数据,并且外键约束帮助保持这种分布式数据的一致性。

MySQL支持CREATE TABLEALTER TABLE语句中的ON UPDATEON DELETE外键引用。可用的参照操作是RESTRICTCASCADESET NULLNO ACTION(默认)。

SET DEFAULT也被MySQL Server支持,但当前被InnoDB拒绝为无效。由于MySQL不支持延迟约束检查,NO ACTION被视为RESTRICT。有关MySQL支持的外键语法,请参见第15.1.20.5节,“外键约束”

MATCH FULLMATCH PARTIALMATCH SIMPLE是允许的,但它们的使用应该避免,因为它们会导致MySQL Server忽略同一语句中的任何ON DELETEON 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_FOREIGNINNODB_FOREIGN_COLS表中找到,在INFORMATION_SCHEMA数据库中。

InnoDBNDB 表支持外键。