Не удается добавить внешний ключ в MySQL с одинаковыми столбцами - PullRequest
3 голосов
/ 01 марта 2012

У меня есть две таблицы, каждая со столбцом provider:

CREATE TABLE `title` (
  `provider` varchar(40) CHARACTER SET latin1 NOT NULL,

CREATE TABLE `notification` (
  `provider` varchar(40) CHARACTER SET latin1 NOT NULL,

Однако, когда я пытаюсь добавить внешний ключ

ALTER TABLE notification ADD FOREIGN KEY (provider) REFERENCES title (provider)

, я получаю следующую неясную ошибку:

Can't create table 'metadata.#sql-c91_345b' (errno: 150)

Обе таблицы пусты.Почему это происходит и что мне нужно сделать, чтобы это исправить?

Ответы [ 2 ]

1 голос
/ 02 марта 2012

http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html говорит:

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

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

Такой индекс создается в ссылочной таблице автоматически, если он не существует.

(Это в отличие от некоторых старых версий, в которых индексам приходилось будет создан явно или создание ограничений внешнего ключа будет fail.) index_name, если дано, используется, как описано ранее.

Я думаю, что вы должны создать любой (уникальный, первичный или простой) индекс для title.provider до создания внешнего ключа, указывающего на него.

1 голос
/ 02 марта 2012

Запустите SHOW ENGINE INNODB STATUS\G и посмотрите на «ПОСЛЕДНЮЮ ОШИБКУ ИНОСТРАННОГО КЛЮЧА», чтобы увидеть более подробную информацию об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...