0

我有一条 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)

它工作得很好。我不知道这里会发生什么。有人可以向我解释为什么会发生这种情况。非常感谢你。

4

1 回答 1

1

FOREIGN KEY应该匹配从最左边开始的几列PRIMARY KEYPRIMARY KEY完全匹配。

因此,在(hotelID, name)PK 的情况下,您可以创建一个引用hotelIDor 的外键(hotelID, name),而不是 to name

这就是文档所说的:

但是,在引用的表中,必须有一个索引,其中引用的列按相同顺序列为第一列。

于 2013-09-15T04:42:15.690 回答