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-keysgroups
、usertogroup
和 usertosite
表是什么样的?
您确定您的列是同一类型吗?我首先创建了 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 无法使用外键创建新表的主要内容,如果未能解决你的问题,请参考以下文章