使用带外键的约束alogn

pieyvz9o  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(260)

我试着去理解 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 或者没有理由这么做?

fzsnzjdm

fzsnzjdm1#

使用 CONSTRAINT 关键字语法,我们可以根据我们选择的约定命名约束,而不是让innodb使用系统指定的名称。
这是唯一的区别。
(令人困惑的是,删除外键约束的语法不允许 CONSTRAINT 关键字,我们必须 ALTER TABLE ... DROP FOREIGN KEY foo ,在哪里 foo 是外键约束的名称,无论是我们指定的名称还是innodb生成的名称。)
是的,如果没有合适的索引,innodb会自动创建一个索引来支持外键。如果我们单独定义一个索引(使用 KEY indexname (id_parent) 例如,外键约束可以具有与索引不同的名称。

相关问题