同一个表的MySQL外键失败,错误1005,错误150

use*_*729 9 mysql foreign-keys mysql-error-1005

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)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

为什么这是错的?

Tom*_*mas 11

应该可以自我参考.这是因为"父"是无符号的而"id"不是.将表定义id列更改为

 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
Run Code Online (Sandbox Code Playgroud)

它会起作用.

关于外键的引用说明:"整数类型的大小和符号必须相同"

似乎是这里描述的相同问题