MySQL外键约束失败

时间:2013-09-15 04:36:53

标签: mysql

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

它完美无缺。我不知道这里发生了什么。有人可以向我解释为什么会这样。非常感谢你。

1 个答案:

答案 0 :(得分:1)

FOREIGN KEY应与PRIMARY KEYPRIMARY KEY最左边的几列完全匹配。

因此,如果是(hotelID, name) PK,您可以创建引用hotelID(hotelID, name)但不引用name的外键。

这就是documentation对此的说法:

  

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