CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`first_name` varchar(50) NOT NULL,
`last_name` varchar(50) NOT NULL,
`email` varchar(150) NOT NULL,
`is_email_verify` int(11) DEFAULT '0',
`phone_no` varchar(15) NOT NULL,
`password` varchar(255) NOT NULL,
`status` varchar(10) NOT NULL,
`role` varchar(50) NOT NULL DEFAULT 'employee',
`photo` varchar(150) NOT NULL,
`group_id` int(11) DEFAULT '0',
`shift_id` int(11) NOT NULL DEFAULT '0',
`shift_date` date NOT NULL,
`created` datetime NOT NULL,
`updated` datetime NOT NULL,
`first_off` varchar(15) NOT NULL,
`second_off` varchar(15) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
和
CREATE TABLE IF NOT EXISTS `project_maps` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`project_id` int(11) UNSIGNED NOT NULL,
`user_id` int(11) UNSIGNED DEFAULT NULL,
`group_id` int(11) UNSIGNED DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_project_id` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
COMMIT;
我正在尝试使用
将project_map.user_id映射到用户表..ALTER TABLE users ADD CONSTRAINT fk_project_users FOREIGN KEY (id) REFERENCES project_maps(user_id);
产生错误“#1215 - 无法添加外键约束”可以解释为什么?
答案 0 :(得分:0)
您需要将外键约束添加到project_maps
,而不是users
:
ALTER TABLE project_maps
ADD CONSTRAINT fk_project_users
FOREIGN KEY (user_id) REFERENCES users (id);
但除此之外,两个表中的用户ID列类型不同。在users
表中,您将其声明为unsigned int:
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT
在project_maps
表中,您使用不同的定义:
`user_id` int(11) NOT NULL AUTO_INCREMENT
在两个表中使用相同的定义,您应该能够添加约束:
int(11) NOT NULL
FYI整数默认为在MySQL中签名,除非你明确地将它们取消签名。
答案 1 :(得分:0)
您正在尝试从 project_maps(user_id)定义外键,
所以这就是问题,
您不能将外键引用分配给非键列(user_id),
如果要创建外键列,则为project_maps表中的project_id创建一个user_id键;
如下
CREATE TABLE IF NOT EXISTS `project_maps` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`project_id` int(11) UNSIGNED NOT NULL,
`user_id` int(11) UNSIGNED DEFAULT NULL,
`group_id` int(11) UNSIGNED DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_project_id` (`project_id`),
KEY `fk_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
然后您的alter query将按预期工作
ALTER TABLE users ADD CONSTRAINT fk_project_users FOREIGN KEY (id) REFERENCES project_maps(user_id);