MySQL我的外键有什么问题吗?

Ski*_*kiy 1 mysql sql foreign-keys create-table

我用注释标记的两个外键有什么问题?

创建数据库db; 使用db;

create table Flug(
Flugbez varchar(20),
FDatum Date,
Ziel varchar(20),
Flugzeit int,
Entfernung int,
Primary Key(Flugbez,FDatum));

create table Flugzeugtyp(
Typ varchar(20),
Hersteller varchar(20),
SitzAnzahl int,
Reisegeschw int,
primary key(Typ)
);

create table flugzeug(
Typ varchar(20),
SerienNr int,
AnschDatum Date,
FlugStd int,
primary key(Typ,SerienNr),
foreign key(Typ)references Flugzeugtyp(Typ));

create table Abflug(
Flugbez varchar(20),
FDatum Date,
Typ varchar(20),
Seriennr int,
Kaptaen varchar(20),
Primary key(Flugbez,FDatum,Typ,SerienNr),
Foreign key(Flugbez)references Flug(Flugbez) ,
- 外键(FDatum)引用Flug(FDatum),
外键(Typ)引用Flugzeugtyp(Typ)
- ,外键(SerienNr)引用Flugzeug(SerienNr)
);

当我取消注释这些时,我得到:

ERROR 1005(HY000):无法创建表'db.abflug'(错误号:150)

我使用MySQL Server 5.5的标准安装

Lar*_*tig 5

问题是您引用的主键是复合键,但您只是尝试引用外键中的一列(而不是第一列).

例如,您primary key(Typ,SerienNr)在表flugzeug中定义主键,但在表Abflug中您尝试引用Foreign key(SerienNr) references Flugzeug(SerienNr).

您必须引用整个键(Foreign key(Typ, SerienNr) references Flugzeug(Typ,SerienNr)).