我正在尝试执行以下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;
答案 0 :(得分:4)
这是一张清单,祝你好运;)
1)外键源和引用字段的类型必须相同
2)源和参考字段都必须是无符号的
3)源字段必须编入索引
4)两个表必须是InnoDB
答案 1 :(得分:3)
如果您使paths.id
不未签名,是否有效?
答案 2 :(得分:-1)
更新:在第一个表中,您将整数值定义为unsigned,而在第二个表中则没有。字段必须在结构上相同才能满足外键。
表格中是否有任何数据?如果是这样,请确保所有记录都满足约束条件。外键控列中的NULL值将阻止其工作。