[英]Adding table with FOREIGN KEY to a MySQL database causes errno 150
我正在嘗試執行以下SQL並收到errno:150'無法創建表path_relations'作為響應。 根據MySQL文檔,這是由我的FOREIGN KEY約束引起的。 我究竟做錯了什么?
DROP TABLE IF EXISTS `paths`;
DROP TABLE IF EXISTS `path_relations`;
CREATE TABLE `paths` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(256) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `path_relations` (
`ancestor` int(11) NOT NULL DEFAULT '0',
`descendant` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY(`ancestor`, `descendant`),
FOREIGN KEY(`ancestor`) REFERENCES paths(`id`),
FOREIGN KEY(`descendant`) REFERENCES paths(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
這是您的清單,祝您好運;)
1)外鍵源的類型和參考字段必須相同
2)源域和引用域都必須未簽名
3)源字段必須被索引
4)兩個表都必須是InnoDB
如果您將paths.id
未簽名,是否paths.id
?
更新:在第一個表中,您將整數值定義為無符號,而在第二個表中,您沒有定義。 這些字段的結構必須相同才能滿足外鍵。
表格中是否已有數據? 如果是這樣,請確保所有記錄都將滿足約束條件。 外鍵列中的NULL值將阻止此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.