mysql> ALTER TABLE category ADD CONSTRAINT category_parent_category_id FOREIGN KEY (parent) REFERENCES category(id);
ERROR 1005 (HY000): Can't create table 'sfnews.#sql-244_1' (errno: 150)

DDL如下:

Create Table: CREATE TABLE `category` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `parent` bigint(20) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  KEY `parent_idx` (`parent`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

为什么错了?

有帮助吗?

解决方案

自参考应该是可能的。这是因为“父母”没有符号,“ID”不是。表定义id列改变到

 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

和它的工作。

有关参考状态外键:“的大小和整数类型的符号必须是相同的”

似乎是同样的问题中描述的此处

其他提示

如果您检查InnoDB引擎(SHOW ENGINE InnoDB STATUS)的状态,你会得到一个更全面的解释:

  

国外最新KEY ERROR

     

[...]

     

找不到被引用表中的表中的索引,其中引用的列显示为所述第一列或列类型和引用表不匹配约束。

id无符号的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top