会话表在这里:
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"外国密钥约束格式不正确")
问题
我是不是错过了什么?
这里的问题是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