2017-09-06 90 views
-1

首先,我已经阅读了关于这种错误类型的所有StackOverflow问题,但我不明白为什么会出现此错误。 我有一个meetings表:错误1215:无法添加外键约束。字段具有相同的类型

CREATE TABLE `meetings` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    `description` text, 
    `city` varchar(255) DEFAULT NULL, 
    `start_time` datetime DEFAULT NULL, 
    `end_time` datetime DEFAULT NULL, 
    `owner` varchar(128) NOT NULL, 
    `is_private` tinyint(1) DEFAULT NULL, 
    `priority` int(11) DEFAULT NULL, 
    `accepted_count` int(11) DEFAULT NULL, 
    `creation_time` datetime DEFAULT CURRENT_TIMESTAMP, 
    `main_pic` text, 
    PRIMARY KEY (`id`), 
    KEY `user_id_idx` (`owner`), 
    KEY `city_fk_idx` (`city`), 
    KEY `weight_idx` (`priority`), 
    CONSTRAINT `city_fk` FOREIGN KEY (`city`) REFERENCES `cities` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
    CONSTRAINT `user_id` FOREIGN KEY (`owner`) REFERENCES `users` (`Id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
    CONSTRAINT `weight` FOREIGN KEY (`priority`) REFERENCES `priorities` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8; 

我有一个meeting_pictures表以及

CREATE TABLE `meeting_pictures` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `path` text NOT NULL, 
    `meeting_id` int(11) NOT NULL, 
    `user_id` varchar(128) NOT NULL, 
    PRIMARY KEY (`id`,`meeting_id`), 
    KEY `user_id_idx` (`user_id`), 
    CONSTRAINT `user_id_fkk` FOREIGN KEY (`user_id`) REFERENCES `users` (`Id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; 

这就是我尝试添加新的FK:

ALTER TABLE `tts`.`meetings` 
ADD CONSTRAINT `meeting_pic_fk1` 
    FOREIGN KEY (`id`) 
    REFERENCES `tts`.`meeting_pictures` (`meeting_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION; 

每当我有这样的: “错误1215:不能添加外键约束”。为什么会这样?两列的类型相同。我怎样才能添加这样的FK?

由于

+0

不,你还没有读完。这是一个常见问题。谷歌'MySQL更多的错误信息'与&没有'外键'。或者用“ - ”相同类型“google”等错误信息。另外,请阅读并在[mcve]上采取行动,否则您将得到的是猜测,不应该发布 - 此评论应该。阅读MySQL文档中的FK提及。它会说FK引用了一个声明的PK或UNIQUE NOT NULL。总是谷歌许多清晰,简洁,具体的问题/问题/ desiderata措辞。如果您找不到答案,请使用一个作为标题并勾勒您的搜索。 (难道真的是你第一个得到这个错误?) – philipxy

+0

FK表示表和列列表中的值出现在引用的表和列列表中的其他地方。你想在别处出现什么样的价值观? – philipxy

回答

1

meeting_pictures主键由两个部分组成:meeting_idid。如果我猜的话,你打算为外键约束去另一个方向:

ALTER TABLE tts.meeting_pictures 
    ADD CONSTRAINT meeting_pic_fk1 
     FOREIGN KEY (meeting_id) 
     REFERENCES tts.meetings (id) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION; 

最起码,这是有道理的,我认为tts.meeting_picures(meeting_id)tts.meetings(id)

+0

感谢您的回复,但在这种情况下,我尝试从会议桌删除实体时遇到了错误,因为它在meeting_pictures表 – neustart47

+0

中存在依赖关系。我该如何避免这种情况?我可以从meetin_picture表中删除所有依赖行吗? – neustart47

相关问题