我试图理解以这种方式创建FOREIGN KEY
之间的区别:
CREATE TABLE child(
id_child INT NOT NULL,
id_parent INT
FOREIGN KEY(id_parent) REFERENCES parent(id_parent));
而不是这一个:
CREATE TABLE child(
id_child INT NOT NULL,
id_parent INT
CONSTRAINT FK_id_parent FOREIGN KEY(id_parent) REFERENCES parent(id_parent));
如果我使用第一个表单,它会创建CONSTRAINT
无论如何(Innodb索引,或者我错了?没有关于索引的说明)。那么,需要明确声明CONSTRAINT
还是没有理由这样做?
答案 0 :(得分:0)
使用CONSTRAINT
关键字语法,我们可以根据我们选择的约定命名约束,而不是让InnoDB使用系统指定的名称。
这是唯一的区别。
(令人困惑的是,删除外键约束的语法不允许CONSTRAINT
关键字,我们必须ALTER TABLE ... DROP FOREIGN KEY foo
,其中foo
是外键的名称约束,我们是否分配了名称或InnoDB生成它。)
是的,如果合适的索引尚未可用,InnoDB会自动创建支持外键的索引。如果我们单独定义索引(例如,使用KEY indexname (id_parent)
,则外键约束可以具有与索引不同的名称。