1

我正在尝试执行以下 SQL 并收到 errno: 150 'cannot create table 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;
4

3 回答 3

4

这是给你的清单,祝你好运;)

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

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

3) 源字段必须被索引

4) 两个表都必须是 InnoDB

于 2012-07-10T13:49:46.830 回答
3

如果您没有未签名,它会起作用paths.id

于 2012-07-10T13:49:04.393 回答
-1

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

表中是否已有数据?如果是这样,请确保所有记录都满足约束。外键列中的 NULL 值将阻止此操作。

于 2012-07-10T13:48:18.107 回答