我试图通过MySQL创建两个关系,当我创建第二个关系“t2”时,我向第一个关系“t1”添加了一个外部约束。
第一个表“t1”已成功构建,但在创建第二个表时显示“错误代码:1822。无法添加外键约束。引用表“t1”中缺少约束“FK2”的索引”表“t2”。
我检查了一些像我这样的问题,一些解决方案是第一个表中引用的属性应该是唯一的或主键。但“Mon”已经是第一个表中的PK了。
我的代码有什么问题?
create table t1
( Num INT(10) NOT NULL,
Mon VARCHAR(7) NOT NULL,
CONSTRAINT PK1 PRIMARY KEY (Num, Mon)
);
CREATE TABLE t2
( Num INT(10) NOT NULL,
Mon VARCHAR(7) NOT NULL,
Totle_Income Decimal(9,2) DEFAULT 0,
CONSTRAINT PK2 PRIMARY KEY (Num, Mon),
CONSTRAINT FK1 FOREIGN KEY (Num) REFERENCES t1(Num)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FK2 FOREIGN KEY (Mon) REFERENCES t1(Mon)
ON DELETE CASCADE ON UPDATE CASCADE
);
最佳答案
t1.mon
只是主键的第二个组成部分,因此也只是索引的第二个组成部分。这并不能有效地索引 t1.mon
,它必须是索引的第一个或唯一的组成部分。
但您可能想要引用完整的 key 。因此外键约束应该包括两列,而不是对键的每个部分都有两个约束。
...
CONSTRAINT FK1
FOREIGN KEY (Num,
Mon)
REFERENCES t1
(Num,
Mon)
ON DELETE CASCADE
ON UPDATE CASCADE,
...
关于mysql - 如何修复创建外部约束时的索引错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55421148/