为什么我收到此错误:错误1215无法添加外键约束?

时间:2017-01-30 01:26:42

标签: mysql foreign-keys

我正在使用三张桌子。

CREATE TABLE Unit(
AptNumber integer(4),
PopertyId integer(4),
RentalPrice integer(8),
Size varchar (20),
PRIMARY KEY (PopertyId, AptNumber),
FOREIGN KEY (PopertyId) REFERENCES Property (Id)
);


CREATE TABLE Customer(
Name varchar(15),
RenterId integer(6),
PRIMARY KEY(RenterId)
);

CREATE TABLE Rentals(
AptNumber integer(4),
RenterId integer(6),
StartDate varchar(8),
EndDate varchar(8),
PRIMARY KEY(AptNumber, RenterId),
FOREIGN KEY (AptNumber) REFERENCES Unit(AptNumber),
FOREIGN KEY (RenterId) REFERENCES Customer(RenterId)
);

当我尝试创建第三个表时,我会收到错误消息。 ERROR 1215(HY000):无法添加外键约束。

我的密钥与数据类型和大小相匹配,所以我不确定问题是什么。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是问题所在:

FOREIGN KEY (AptNumber) REFERENCES Unit(AptNumber),

当您引用像Unit(AptNumber)这样的父列时,该列必须是引用表中键中的 first 列。

但是你的是Unit的主键中的第二个列:

PRIMARY KEY (PopertyId, AptNumber),

另外,理想情况下,外键应引用整个主键或唯一键,因此您可以保证子表中的一行恰好引用父表中的一行。

从技术上讲,InnoDB具有非标准功能,允许外键引用父键主列的子集,但这意味着您的子行可以引用父表中的多行。这会带来一堆奇怪的情况,比如你删除父表中的行会怎么样?最好避免创建这样的外键。

答案 1 :(得分:0)

更好:

1.Create Main table first with Primary Key.
2.Create Foreign Key table without a constraints.

依旧......

更改表格tbl_foreign添加约束:

ALTER TABLE tbl_foreign 
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

请参阅Alter表约束