我试着去理解 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
或者没有理由这么做?
1条答案
按热度按时间fzsnzjdm1#
使用
CONSTRAINT
关键字语法,我们可以根据我们选择的约定命名约束,而不是让innodb使用系统指定的名称。这是唯一的区别。
(令人困惑的是,删除外键约束的语法不允许
CONSTRAINT
关键字,我们必须ALTER TABLE ... DROP FOREIGN KEY foo
,在哪里foo
是外键约束的名称,无论是我们指定的名称还是innodb生成的名称。)是的,如果没有合适的索引,innodb会自动创建一个索引来支持外键。如果我们单独定义一个索引(使用
KEY indexname (id_parent)
例如,外键约束可以具有与索引不同的名称。