我有以下SQL语句:
CREATE TABLE patient(
Name varchar(255),
Geburtsdatum date,
CONSTRAINT pk_patient PRIMARY KEY (Name,Geburtsdatum)
);
CREATE TABLE fake(
Name varchar(255),
PName varchar(255),
PGeburtsdatum date,
CONSTRAINT pk_fake PRIMARY KEY (Name,PName,PGeburtsdatum),
CONSTRAINT fk_PName2 FOREIGN KEY (PName) REFERENCES patient(Name) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_PGeburtsdatum FOREIGN KEY (PGeburtsdatum) REFERENCES patient(Geburtsdatum) ON DELETE CASCADE ON UPDATE CASCADE
);
这给了我错误“#1215 - 无法添加外键约束”。如果我删除第二个表创建中的最后一个约束一切正常。我所有其他外键约束的工作方式完全相同。我在这里缺少什么?
答案 0 :(得分:1)
不确定为何将mysql
问题标记为db2
。无论如何,MySQL documentation州:
MySQL要求外键和引用键上的索引,以便外键检查可以快速而不需要表扫描
所以在Geburtsdatum
列中添加一个索引:
CREATE TABLE patient(
Name varchar(255),
Geburtsdatum date,
INDEX (Geburtsdatum),
CONSTRAINT pk_patient PRIMARY KEY (Name,Geburtsdatum)
);