2016-12-16 177 views
1

我试图学习外键约束的概念,并阅读了manual about使用这些类型的约束。我对这些限制非常了解,并且按照预期工作。然而,手册说创建约束的语法是FOREIGN KEY [index_name] (index_col_name, ...),但是当我运行以下查询时,外键约束得到一个完全不同的名称;约束名称被忽略

CREATE TABLE blog_user (
    `blog` INTEGER NOT NULL, 
    `user` INTEGER NOT NULL, 

    UNIQUE `blog_user` (`blog`, `user`), 

    FOREIGN KEY `blog_reference` (`blog`) 
     REFERENCES `blog` (`id`) 
      ON UPDATE CASCADE 
      ON DELETE RESTRICT, 

    FOREIGN KEY `user_reference` (`user`) 
     REFERENCES `user` (`id`) 
      ON UPDATE CASCADE 
      ON DELETE CASCADE 
) ENGINE = InnoDB; 

约束名称导致blog_ibfk_1,而不是blog_referenceuser_ibfk_1而不是user_reference。为什么他们得到自己的名字,而不是我说的那个?

回答

1

不是使用CONSTRAINT关键字指定像

CONSTRAINT `blog_ibfk_1` FOREIGN KEY (`blog`) 
     REFERENCES `blog` (`id`) 
      ON UPDATE CASCADE 
      ON DELETE RESTRICT 
+0

的FK约束谢谢你,原来我不明白手册。我认为约束名称是由'index_name'确定的,但实际上它是'符号'。添加'CONSTRAINT constraint_name'部分正确命名它们! – Daniel