将带有FOREIGN KEY的表添加到MySQL数据库会导致错误150

时间:2012-07-10 13:44:22

标签: mysql sql innodb

我正在尝试执行以下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;

3 个答案:

答案 0 :(得分:4)

这是一张清单,祝你好运;)

1)外键源和引用字段的类型必须相同

2)源和参考字段都必须是无符号的

3)源字段必须编入索引

4)两个表必须是InnoDB

答案 1 :(得分:3)

如果您使paths.id 未签名,是否有效?

答案 2 :(得分:-1)

更新:在第一个表中,您将整数值定义为unsigned,而在第二个表中则没有。字段必须在结构上相同才能满足外键。

表格中是否有任何数据?如果是这样,请确保所有记录都满足约束条件。外键控列中的NULL值将阻止其工作。