Sql 无法添加外键约束-适用于一个约束,但不适用于另一个约束

Sql 无法添加外键约束-适用于一个约束,但不适用于另一个约束,sql,popsql,Sql,Popsql,我创建了以下表格(有更多属性,但它们与问题无关): 并尝试使用以下命令连接它们: ALTER TABLE Node ADD CONSTRAINT fk_1 FOREIGN KEY(max_path_outer_id) REFERENCES PathData(path_outer_id); ALTER TABLE Node ADD CONSTRAINT fk_2 FOREIGN KEY(max_path_inner_id) REFERENCES PathData(path_inner_id);

我创建了以下表格(有更多属性,但它们与问题无关):

并尝试使用以下命令连接它们:

ALTER TABLE Node ADD CONSTRAINT fk_1
FOREIGN KEY(max_path_outer_id) REFERENCES PathData(path_outer_id);

ALTER TABLE Node ADD CONSTRAINT fk_2
FOREIGN KEY(max_path_inner_id) REFERENCES PathData(path_inner_id);
但是,当fk_1起作用时,fk_2会导致“无法添加外键”约束错误,我也不知道为什么,因为它与fk_1的作用完全相同,除了另一个属性。我试着寻找是什么导致了这一点,但我似乎找不到任何类似的


我想这可能与内部id在外部id之后声明为PK有关,但这似乎不符合逻辑。

这是带有InnoDB引擎的MySQL吗?我不确定这是什么。我使用的语言是SQL,但我正在PopSQL上编写这样的命令。如果它是MySQL作为后端,您的问题是“在引用的表中,必须有一个索引,其中引用的列是相同顺序的第一列”(请参阅),并且
路径\u内部\u id
上没有这样的索引。可能值得将
索引(path\u inner\u id)
添加到
PathData
表中,看看这是否解决了问题。嗯,我不确定我是否理解这个问题,因为
path\u outer\u id
起作用,而且它没有像手册所说的那样明确声明为索引。但是谢谢,你的解决方案确实奏效了。你能详细说明为什么会有差异吗?在
path\u outer\u id
上的
PathData
中有一个索引,它在列表中的第一个有
path\u outer\u id
主键(path\u outer\u id,path\u inner\u id)
。注意:您也可以使用
外键(max\u path\u outer\u id,max\u path\u inner\u id)引用PathData(path\u outer\u id,path\u inner\u id)
解决这个问题,因为
PathData
中也有匹配的索引。
ALTER TABLE Node ADD CONSTRAINT fk_1
FOREIGN KEY(max_path_outer_id) REFERENCES PathData(path_outer_id);

ALTER TABLE Node ADD CONSTRAINT fk_2
FOREIGN KEY(max_path_inner_id) REFERENCES PathData(path_inner_id);