2013-09-15 6 views
0

У меня есть SQL заявление:MySQL внешнего ключа Ограничить терпит неудачу

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

Я предполагаю, что внешний ключ должен соответствовать первичному первому ключу * для внешней таблицы. Помните, что комбинированный первичный ключ похож на один большой конкатенированный ключ. – Anthony

ответ

1

FOREIGN KEY должен соответствовать либо нескольким столбцам слева большей части PRIMARY KEY, либо PRIMARY KEY.

Так что в случае (hotelID, name) ПК вы можете создать внешний ключ, ссылающийся на hotelID или (hotelID, name), но не name.

Вот что documentation говорит о том, что:

Однако в указанной таблице, должен быть индекс, где упомянутые столбцы перечислены первые столбцы в том же порядке.

+0

Таким образом, нет возможности добавить ограничение внешнего ключа с помощью «имени» в другой таблице? – themyth92

+0

@ themyth92: Если в его левой части больше нет 'PK' с' name', тогда нет – zerkms

Смежные вопросы