代码之家  ›  专栏  ›  技术社区  ›  Melolailo

将约束与外键一起使用

  •  1
  • Melolailo  · 技术社区  · 6 年前

    我试图理解创建 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索引,还是我错了?关于索引的说明不多)。那么,有什么必要明确声明 限制 还是没有理由这么做?

    1 回复  |  直到 6 年前
        1
  •  0
  •   spencer7593    6 年前

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

    这是唯一的区别。

    (令人困惑的是,删除外键约束的语法不允许 限制 关键字,我们必须 ALTER TABLE ... DROP FOREIGN KEY foo 哪里 foo 是外键约束的名称,无论是我们指定的名称还是InnoDB生成的名称。)

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