Mysql 表的多列引用同一外键列

Mysql 表的多列引用同一外键列,mysql,foreign-keys,ddl,Mysql,Foreign Keys,Ddl,我有一个名为subcategories的表,它的记录可以进一步链接到表中的其他记录。因此,我创建了一个定义这些链接的subcategorylinker表。在此表中,我有两列subcategory和nextsubcategory,这两列都指向subcategories表的id字段。但是我在创建表的过程中遇到了一个错误。错误如下所示: ERROR 1005: Can't create table 'test01.subcategorylinker' (errno: 150) 表定义如下: CREA

我有一个名为subcategories的表,它的记录可以进一步链接到表中的其他记录。因此,我创建了一个定义这些链接的
subcategorylinker
表。在此表中,我有两列subcategory和
nextsubcategory
,这两列都指向subcategories表的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` )
这意味着表中的每个
(子类别,nextsubcategy)
组合都应该与表中的
(id,id)
组合匹配。由于不存在
(id,id)
的组合,因为它是单个字段,所以此语句是非法的

相反,您可以有两个外键,一个用于
子类别
,另一个用于
下一个tsubcategory
,每个外键都应该与
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);