2017-09-06 86 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

相關問題