【问题标题】:MySQL failing to create a new table using Foreign KeysMySQL 无法使用外键创建新表
【发布时间】: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;

【问题讨论】:

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

标签: mysql sql foreign-keys


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    相关资源
    最近更新 更多