会话表在这里:
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"外国 键约束形成错误")
问题
我错过了什么吗?
答案 0 :(得分:2)
此处的问题是sessions.user_id
和tblusers.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