繁体   English   中英

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

[英]MySQL foreign key to the same table failed with error 1005, errno 150

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 ),您将获得更全面的解释:

最新的外国关键错误

[...]

在引用的表中找不到索引,其中引用的列显示为第一列,或者表中的列类型与引用的表不匹配约束。

使id无符号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM