我在MySQL数据库的表中添加外键约束时遇到了一些麻烦。
我有以下用户表:
CREATE TABLE `user` (
`Id` varchar(128) NOT NULL,
`Email` varchar(255) NOT NULL,
`EmailConfirmed` tinyint(1) NOT NULL,
`PasswordHash` longtext,
`SecurityStamp` longtext,
`PhoneNumber` longtext,
`PhoneNumberConfirmed` tinyint(1) NOT NULL,
`TwoFactorEnabled` tinyint(1) NOT NULL,
`LockoutEndDateUtc` datetime DEFAULT NULL,
`LockoutEnabled` tinyint(1) NOT NULL,
`AccessFailedCount` int(11) NOT NULL,
`UserName` varchar(255) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
这是我的用户通知表我正在尝试添加外键:
CREATE TABLE `usernotice` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`notifySitemap` bit(1) NOT NULL,
`notifyRobots` bit(1) NOT NULL,
`user_id` varchar(128) DEFAULT NULL,
`health_site_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_constraint_idx` (`user_id`),
KEY `healthSiteId_idx` (`health_site_id`),
CONSTRAINT `healthSiteId` FOREIGN KEY (`health_site_id`) REFERENCES `health_site` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8
我正在尝试引用usernotice.user_id列中的user.id列。为此,我使用以下SQL:
ALTER TABLE usernotice
ADD CONSTRAINT userId
FOREIGN KEY (user_id)
REFERENCES user (Id)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
当我执行此操作时,我收到1215代码的错误。谁能告诉我我做错了什么?
编辑:在检查show create table
个查询后,我注意到所使用的字符集存在差异。用另一个字符集重新创建usernotice
表修复此问题。
答案 0 :(得分:0)
https://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html外键和引用键中的对应列必须具有相似的数据类型。整数类型的大小和符号必须相同。字符串类型的长度不必相同。对于非二进制(字符)字符串列,字符集和排序规则必须相同。
你的角色集不一样......