Mysql “我怎样才能解决问题?”;“外键约束格式不正确”;我的数据库中的问题

Mysql “我怎样才能解决问题?”;“外键约束格式不正确”;我的数据库中的问题,mysql,foreign-keys,Mysql,Foreign Keys,我创建了酒店,房间,客人的桌子。创建预订表后,我无法添加外键。它会出错 无法创建表hotelbooking预订(错误号:150“外键约束格式不正确”) 您可以定义一个与房间中的主键相匹配的组合外键 CREATE TABLE Room ( hid int, RoomNo int, RoomType varchar(100), Price varchar(50), FOREIGN KEY (hid) REFERENCES Hotel(hid), CONSTRAINT PK_roomId PRI

我创建了酒店,房间,客人的桌子。创建预订表后,我无法添加外键。它会出错

无法创建表
hotelbooking
预订
(错误号:150“外键约束格式不正确”)


您可以定义一个与房间中的主键相匹配的组合外键

CREATE TABLE Room (
hid int, 
RoomNo int, 
RoomType varchar(100), 
Price varchar(50),
FOREIGN KEY (hid) REFERENCES Hotel(hid),
CONSTRAINT PK_roomId PRIMARY KEY (hid, RoomNo)
); 

CREATE TABLE Booking (
gId int, 
hId int, 
rhId int, 
RoomNo int, 
FromDate Date, 
ToDate Date,
PaymentMethod varchar(100),
FOREIGN KEY (hid) REFERENCES Hotel(hid),
FOREIGN KEY (gid) REFERENCES Guest(gid),
FOREIGN KEY (rhid,RoomNo) REFERENCES Room(hid,RoomNo),
CONSTRAINT PK_bookingRoom PRIMARY KEY (gId, hId, RoomNo, FromDate)
);
或者在roomNo上定义idex

CREATE TABLE Room (
hid int, 
RoomNo int, 
RoomType varchar(100), 
Price varchar(50),
FOREIGN KEY (hid) REFERENCES Hotel(hid),
KEY(RoomNo),
CONSTRAINT PK_roomId PRIMARY KEY (hid, RoomNo)
); 

CREATE TABLE Booking (
gId int, 
hId int, 
RoomNo int, 
FromDate Date, 
ToDate Date,
PaymentMethod varchar(100),
FOREIGN KEY (hid) REFERENCES Hotel(hid),
FOREIGN KEY (gid) REFERENCES Guest(gid),
FOREIGN KEY (RoomNo) REFERENCES Room(RoomNo),
CONSTRAINT PK_bookingRoom PRIMARY KEY (gId, hId, RoomNo, FromDate)
);

您似乎正在尝试创建带有指向
酒店
宾客
客房
表的外键引用的
预订
表,但如果您先创建
预订
,则这些表还不存在

您需要先创建其他表,然后创建引用它们的
Booking

或者,创建
预订
,但不声明其外键。然后创建其他表。然后使用
altertablebooking
向该表添加外键约束


但是,在创建表之前,外键不能引用表。

是否要跨两个数据库创建外键?
CREATE TABLE Room (
hid int, 
RoomNo int, 
RoomType varchar(100), 
Price varchar(50),
FOREIGN KEY (hid) REFERENCES Hotel(hid),
KEY(RoomNo),
CONSTRAINT PK_roomId PRIMARY KEY (hid, RoomNo)
); 

CREATE TABLE Booking (
gId int, 
hId int, 
RoomNo int, 
FromDate Date, 
ToDate Date,
PaymentMethod varchar(100),
FOREIGN KEY (hid) REFERENCES Hotel(hid),
FOREIGN KEY (gid) REFERENCES Guest(gid),
FOREIGN KEY (RoomNo) REFERENCES Room(RoomNo),
CONSTRAINT PK_bookingRoom PRIMARY KEY (gId, hId, RoomNo, FromDate)
);