MySQL错误1822:添加外键约束失败;存在约束BUT索引的缺失索引

use*_*295 1 mysql database error-handling foreign-keys

我试图将一个外键添加到我的排期表中,但是失败了,但是我真的不知道为什么。外键应引用tblAircraft表中的txtAC_tag属性,该属性是主键的一部分!因此,将tblAircraft编入索引(主键是由idAC和txtAC_tag组成的组合键->组合的主键可能是问题吗?),并且属性的数据类型匹配。

这是我的表声明和外键声明:

create table if not exists tblAircrafts(
idAC       int not null auto_increment,
txtAC_tag  varchar(255) not null,
txtAC_type varchar(255) not null,
primary key(idAC, txtAC_tag));

create table if not exists tblFlightSchedule(
ID int not null auto_increment,
datDate date,
txtFrom varchar(255),
txtTo   varchar(255),
txtFlight varchar(255),
numFlight_time_decimal decimal(4,2),
txtAC_tag varchar(255) not null,
txtAC_type varchar(255) not null,
numSeatCapacity int unsigned,
numLoad int unsigned, -- auslastung 
numDirt decimal(20,19),
numTotalFlightTime decimal(50,5),
numCumDirt decimal(20,15),
primary key(ID));

alter table tblflightschedule
add foreign key(txtAC_tag) references tblaircrafts(txtAC_tag);
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

Error Code: 1822. Failed to add the foreign key constaint. Missing index for constraint '' in the referenced table 'tblaircrafts'
Run Code Online (Sandbox Code Playgroud)

有什么建议么?感谢您可以给我的任何帮助,谢谢!

May*_*eyz 5

问题在这里:

add foreign key(txtAC_tag) references tblaircrafts(txtAC_tag);
Run Code Online (Sandbox Code Playgroud)

这里要绑定txtAC_tagtxtAC_tagtblaircrafts外键关系,但在表tblaircraftstxtAC_tag既不是unique也不是primary,这就是为什么它显示错误。

对于外键关系,要在其上创建关系的父表列必须为unique或,primary并且它们还必须具有相同的数据类型。

要解决此问题,请使txtAC_tag列唯一。

  • ...因此,他可能应该使用约束+1来使txtAC_tag唯一。 (2认同)