MySQL 无法使用外键创建新表

Posted

技术标签:

【中文标题】MySQL 无法使用外键创建新表【英文标题】:MySQL failing to create a new table using Foreign Keys 【发布时间】:2014-01-05 13:21:11 【问题描述】:

当我运行它时,我只得到一个错误 150。其他表是 InnoDB,类型是主键,数据类型匹配。所以我看不出我做错了什么,(而且我没有看到明显的语法错误)。有什么想法吗?

CREATE TABLE grouptosite (
  groups_id BIGINT(20),
  usertogroup_groupID BIGINT(20),
usertogroup_userID BIGINT(20),
  usertosite_id INT(10),

  gts_id INT(10) AUTO_INCREMENT NOT NULL,
  PRIMARY KEY (gts_id),
index (gts_id),
index (groups_id),
  index (usertogroup_groupID), 
index (usertogroup_userID),
  index (usertosite_id), 

FOREIGN KEY (groups_id)
    REFERENCES groups(id)
    ON UPDATE CASCADE ON DELETE RESTRICT,
  FOREIGN KEY (usertogroup_groupID, usertogroup_userID)
    REFERENCES usertogroup(groupID, userID)
    ON UPDATE CASCADE ON DELETE RESTRICT,
  FOREIGN KEY (usertosite_id)
    REFERENCES usertosite(id)
    ON UPDATE CASCADE ON DELETE RESTRICT  
) ENGINE=INNODB;

【问题讨论】:

这应该可以解决您的问题***.com/questions/825362/mysql-error-150-foreign-keys groupsusertogroupusertosite 表是什么样的? 您确定您的列是同一类型吗?我首先创建了 ID 为 BIGINT 的 usertosite 表(遵循其他表的相同模式),但 grouptosite.usertosite_id 字段为 INT。 sqlfiddle.com/#!2/d821a Xecaps12 是正确的。我不能给你复选标记,但这解决了它。 @xecaps12:请考虑重新发布您的建议作为答案。我相信回答这个问题(实际上和正式地)将是对网站的有价值的补充。尽管该案例似乎已被文档完美地涵盖,但增加 int/bigint 混淆的重要性可能对公众有所帮助。 【参考方案1】:

您确定您的列是同一类型吗?我首先创建了 ID 为 BIGINT 的 usertosite 表(遵循其他表的相同模式),但 grouptosite.usertosite_id 列是 INT:http://sqlfiddle.com/#!2/d821a。

正如另一条评论中提到的,foreign keys 的数据类型需要相同。

【讨论】:

以上是关于MySQL 无法使用外键创建新表的主要内容,如果未能解决你的问题,请参考以下文章

Mysql,innodb - 无法创建外键

MySQL 无法使用表 wp_users 创建外键引用

使用 mysql 工作台创建 CHAR 类型的外键时出错:错误 1005:无法创建表(错误号:150)

MySQL - 无法定义外键

MySQL无法创建外键查询外键的属性

MySQL表rename导致的外键问题