使用带有FOREIGN KEY的CONSTRAINT alogn

时间:2018-04-30 21:33:38

标签: mysql database foreign-keys constraints mysql-workbench

我试图理解以这种方式创建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 个答案:

答案 0 :(得分:0)

使用CONSTRAINT关键字语法,我们可以根据我们选择的约定命名约束,而不是让InnoDB使用系统指定的名称。

这是唯一的区别。

(令人困惑的是,删除外键约束的语法不允许CONSTRAINT关键字,我们必须ALTER TABLE ... DROP FOREIGN KEY foo,其中foo是外键的名称约束,我们是否分配了名称或InnoDB生成它。)

是的,如果合适的索引尚未可用,InnoDB会自动创建支持外键的索引。如果我们单独定义索引(例如,使用KEY indexname (id_parent),则外键约束可以具有与索引不同的名称。