【发布时间】:2016-04-03 06:17:15
【问题描述】:
我在vb.net 中开发了一个同步模块,因此为了避免在不同的记录上出现重复的id,我使用了GUID。现在我要做的是在我的桌子上将 GUID 设置为primary key (PK)。这是两个表的结构:
用户
CREATE TABLE IF NOT EXISTS `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`GUID` char(36) NOT NULL,
`first_name` varchar(256) DEFAULT NULL,
`last_name` varchar(512) DEFAULT NULL,
`email` varchar(512) DEFAULT NULL,
`mobile_number` varchar(128) DEFAULT NULL,
`phone_number` varchar(128) DEFAULT NULL,
`address` varchar(256) DEFAULT NULL,
`city` varchar(256) DEFAULT NULL,
`state` varchar(128) DEFAULT NULL,
`zip_code` varchar(64) DEFAULT NULL,
`notes` text,
`id_roles` bigint(20) unsigned NOT NULL,
`data` int(11) NOT NULL,
`lastUpdated` varchar(36),
PRIMARY KEY (`id`),
KEY `id_roles` (`id_roles`)
) ENGINE=InnoDB AUTO_INCREMENT=85 DEFAULT CHARSET=utf8;
USER_SETTINGS
CREATE TABLE IF NOT EXISTS `user_settings` (
`id_users` bigint(20) unsigned NOT NULL,
`GUID` char(36) NOT NULL,
`username` varchar(256) DEFAULT NULL,
`password` varchar(512) DEFAULT NULL,
`salt` varchar(512) DEFAULT NULL,
`working_plan` text,
`notifications` tinyint(4) DEFAULT '0',
`google_sync` tinyint(4) DEFAULT '0',
`google_token` text,
`google_calendar` varchar(128) DEFAULT NULL,
`sync_past_days` int(11) DEFAULT '5',
`sync_future_days` int(11) DEFAULT '5',
`lastUpdated` varchar(36),
PRIMARY KEY (`GUID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
您如何看到我已将FK 设置为user_settings 表中的GUID 字段,GUID 是从users 表中获取的:
ALTER TABLE `user_settings`
ADD CONSTRAINT `user_settings_ibfk_1` FOREIGN KEY (`GUID`) REFERENCES `users` (`GUID`) ON DELETE CASCADE ON UPDATE CASCADE;
但我收到此错误消息:
1215 - 无法添加外键约束
我做错了什么?
【问题讨论】:
-
您在键上没有索引。重复的问题。
-
索引?你到底是什么意思?
-
“您如何看到我已在 user_settings 表中将 PK 设置为 GUID 字段” - 不,您尝试添加 FK 而不是 PK。
-
是的,我打错了,无论如何,我想使用 user_settings 的 GUID PK 引用 users 表的 GUID。我编辑了错误的错字。