2017-04-20 2316 views
0

我想添加一个外键给我的flightschedule表,但它失败了,但我不知道为什么。外键应引用属于主键的tblAircraft表中的txtAC_tag属性! 因此,tblAircraft被索引(主键是由idAC和txtAC_tag组成的组合键 - >组合主键是否成问题?)和属性的数据类型匹配。MySQL错误1822:无法添加外键约束;缺少索引为contraint BUT索引存在

这里是我的表的定义键和外键声明:

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); 

这里是错误消息:

Error Code: 1822. Failed to add the foreign key constaint. Missing index for constraint '' in the referenced table 'tblaircrafts' 

有什么建议?我很感激您能给我的任何帮助,谢谢!

回答

2

问题就在这里:

add foreign key(txtAC_tag) references tblaircrafts(txtAC_tag); 

这里要绑定txtAC_tagtblaircraftstxtAC_tagtblaircraftstxtAC_tag既不unique也不primary这就是为什么它显示错误。

对于外键关系,您要在其上创建关系的父表列必须是uniqueprimary,并且它们也必须具有相同的数据类型。

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

+2

...因此,他应该使用约束+1使'txtAC_tag'唯一。 –

+1

@TimBiegeleisen:是的,你说的是确切的东西。 –

+0

非常感谢你,这解决了我的问题! – user7335295

0

看来你已经创建复合主键为表tblAircrafts

如果你想复合键引用添加到表tblflightschedule,你需要使用下面的语法:

alter table tblflightschedule 
add foreign key ('int Column', txtAC_tag) references tblaircrafts **(idAC, txtAC_tag);** 

而且你必须是指添加外键两列(“INT列',txtAC_tag)。

所以,你可以在你的tblflightschedule表添加更多的列或tblaircrafts表中删除一列。

相关问题