我正在使用三张桌子。
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):无法添加外键约束。
我的密钥与数据类型和大小相匹配,所以我不确定问题是什么。
感谢您的帮助。
答案 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表约束