MySQL 一直提示外键。错误 150

标签 mysql sql database foreign-keys

我正在尝试创建一个自身带有外键的表。我想建模一个可以是另一个类别的子类别的类别。这是我的 SQL:

CREATE TABLE IF NOT EXISTS `recipes`.`category` (
  `id` INT NOT NULL COMMENT '',
  `name` VARCHAR(60) NOT NULL COMMENT '',
  `description` VARCHAR(255) NULL COMMENT 'Description of the recipe category.',
  `parent_id` INT NULL COMMENT '',
  PRIMARY KEY (`id`)  COMMENT '',
  CONSTRAINT `parent_id`
    FOREIGN KEY (`id`)
    REFERENCES `recipes`.`category` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

但是,MySQL 一直报错:

Can't create table 'recipes.category' (errno: 150)

我想找出我做错了什么,有人可以给我提示吗?文档说:

Cannot create table. If the error message refers to error 150, table creation failed because a foreign key constraint was not correctly formed.

但是,这对我帮助不大。

最佳答案

我想您希望 parent_id 列链接到 id 列(而不是 idid column) 构建层次结构。否则它没有多大意义:

constraint `parent_id`
foreign key (`parent_id`)
references `category` (`id`)
on delete no action
on update no action);

SQLFiddle

关于MySQL 一直提示外键。错误 150,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31094505/

相关文章:

python - 从 tkinter 输入框搜索记录时如何从 sqlite 数据库返回记录 (Python)

sql - 无需执行 rbar 即可从多个位置挑选足够的元素

mysql - 查询表以在单个查询中获得 2 个计数。

php - 将购物车数据插入数据库

mysql - 加入具有多个引用和两个要添加的值的两个表

mysql - 运行查询时没有结果(空白)- 试图从 3 个表中得出结果

php - 避免删除多个文件

sql - 过滤SQL中的重复值

java - 在 Java 中支持 Oracle 和 Access 数据层

database - 良好的数据库设计 : enum values: ints or strings?