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

时间:2017-04-20 05:48:14

标签: mysql database error-handling foreign-keys

我正在尝试将一个外键添加到我的flightchedule表但它失败了,但我真的不知道为什么。外键应该引用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);

这是ERROR消息:

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

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

2 个答案:

答案 0 :(得分:2)

问题在于:

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

此处您将txtAC_tag绑定到txtAC_tag表的tblaircrafts,但在tblaircrafts中,txtAC_tag列既不是unique也不是{{1}这就是它显示错误的原因。

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

要解决此问题,请将primary列设为唯一。

答案 1 :(得分:0)

您似乎已为表 tblAircrafts 创建复合主键

如果要将复合键引用添加到表 tblflightschedule ,则需要使用以下语法:

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

你必须引用两列来添加外键('int Column',txtAC_tag)。

因此,您可以在 tblflightschedule 表格中添加一列,或从 tblaircrafts 表格中删除一列。