1.7.3.2 FOREIGN KEY约束

外键可让您跨表参考相关数据,外键限制有助于保持这种扩展数据的一致性。

MySQL支持ON UPDATEON DELETE外键引用CREATE TABLEALTER TABLE语句。可用参照动作RESTRICT(默认), ,CASCADESET NULLNO ACTION

注意

NDB不支持ON UPDATE CASCADE引用的列是父表的主键的操作。

SET DEFAULT也由MySQL服务器支持,但目前拒绝通过无效InnoDBNDB。由于MySQL不支持延迟约束检查,NO ACTION因此被视为RESTRICT。有关MySQL外键支持的确切语法,请参见第13.1.17.5节“使用FOREIGN KEY约束”

MATCH FULLMATCH PARTIAL并且MATCH SIMPLE被允许,但应避免使用它们,因为它们会导致MySQL服务器忽略同一语句中使用的任何ON DELETE或多个ON UPDATE子句。MATCH选项在MySQL中没有任何其他效果,这实际上是强制MATCH SIMPLE语义全职的。

MySQL要求对外键列进行索引;如果您创建具有外键约束但没有给定列索引的表,则会创建一个索引。异常:NDB群集在外键列上需要显式唯一的密钥(或主键)。

您可以从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排(0.01秒)

有关InnoDB表上的外键的信息也可以在数据库中的INNODB_SYS_FOREIGNINNODB_SYS_FOREIGN_COLS表中找到INFORMATION_SCHEMA

results matching ""

    No results matching ""