我有一个名为 subcategories 的表,其记录可以进一步链接到表中的其他记录。所以我创建了一个定义这些链接的 subcategorylinker
表。在此表中,我有 2 列子类别和 nextsubcategory
,它们都引用子类别表的 id 字段。但是我在创建表时遇到错误。错误如下:
ERROR 1005: Can't create table 'test01.subcategorylinker' (errno: 150)
表定义如下:
CREATE TABLE `test01`.`subcategorylinker` (
`id` INT NOT NULL ,
`subcategory` INT NOT NULL ,
`nextsubcategory` INT NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_subcategorylinker_sub` (`subcategory` ASC, `nextsubcategory` ASC) ,
CONSTRAINT `fk_subcategorylinker_sub`
FOREIGN KEY (`subcategory` , `nextsubcategory` )
REFERENCES `test01`.`subcategories` (`id` , `id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION);
最佳答案
让我们检查一下外键子句:
FOREIGN KEY (`subcategory` , `nextsubcategory` )
REFERENCES `test01`.`subcategories` (`id` , `id` )
这意味着表格中 (subcategory, nextsubcategroy)
的每个组合都应与表格中 (id, id)
的组合相匹配。由于没有 (id, id)
的组合,因为它是单个字段,所以该语句是非法的。
相反,您可以有两个外键,一个用于 subcategory
,一个用于 nextsubcategory
,每个都应匹配一个 id
:
CREATE TABLE `test01`.`subcategorylinker` (
`id` INT NOT NULL ,
`subcategory` INT NOT NULL ,
`nextsubcategory` INT NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_subcategorylinker_sub` (`subcategory` ASC),
CONSTRAINT `fk_subcategorylinker_sub`
FOREIGN KEY (`subcategory`)
REFERENCES `test01`.`subcategories` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
INDEX `fk_nextsubcategorylinker_sub` (`nextsubcategory` ASC),
CONSTRAINT `fk_nextsubcategorylinker_sub`
FOREIGN KEY (`nextsubcategory`)
REFERENCES `test01`.`subcategories` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
关于mysql - 一个表的多个列引用同一个外键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25278713/