外键约束形成错误:MySQL

时间:2016-01-07 01:31:04

标签: mysql

会话表在这里:

CREATE TABLE `sessions` (
  `id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `user_id` int(11) DEFAULT NULL,
  `ip_address` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

用户表位于

之下
CREATE TABLE IF NOT EXISTS `tblusers` (
  `UserID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `UserName` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `EmailAddress` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `RoleID` tinyint(4) NOT NULL,
  PRIMARY KEY (`UserID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=17;

我在下面尝试查询以在会话表中应用外键约束

ALTER TABLE sessions
ADD CONSTRAINT FK_sessions_tblusers_UserID
FOREIGN KEY (user_id)
REFERENCES tblusers(UserID)

MySQL说

  

1005 - 无法创建表myapp#sql-6b8_83(错误:150"外国   键约束形成错误")

问题

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

此处的问题是sessions.user_idtblusers.UserID的列类型不匹配。我重现了同样的错误并通过改变两列来修复它......

`user_id` INT(11) UNSIGNED DEFAULT NULL

...和...

`UserID` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT

我做了这些更改后成功创建了外键。请注意,我没有必要更改匹配的可空性,但如果要求会话具有用户ID,则可能需要使用sessions.user_id执行此操作...

`user_id` INT(11) UNSIGNED NOT NULL