我有一个SQL语句:
CREATE TABLE RoomType(
hotelID SMALLINT NOT NULL,
name VARCHAR(20) NOT NULL,
PRIMARY KEY (hotelID, name)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE BookingItem(
bookingID SMALLINT NOT NULL,
roomTypeName VARCHAR(20) NOT NULL,
PRIMARY KEY (bookingID, roomTypeName),
FOREIGN KEY (roomTypeName) REFERENCES RoomType(name)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
它显示错误#1215 - 无法添加外键约束。 但是当我更改这一行时:
PRIMARY KEY (hotelID, name)
进入
PRIMARY KEY (name, hotelID)
它完美无缺。我不知道这里发生了什么。有人可以向我解释为什么会这样。非常感谢你。
答案 0 :(得分:1)
FOREIGN KEY
应与PRIMARY KEY
或PRIMARY KEY
最左边的几列完全匹配。
因此,如果是(hotelID, name)
PK,您可以创建引用hotelID
或(hotelID, name)
但不引用name
的外键。
这就是documentation对此的说法:
但是,在引用的表中,必须有一个索引,其中引用的列被列为相同顺序的第一列。