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