Получение ошибки 1822 в MySQL при попытке создать внешний ключ - PullRequest
0 голосов
/ 10 мая 2019

Я получаю ошибку при создании внешнего ключа.Ошибка 1822 и говорит следующее:

Код ошибки: 1822. Не удалось добавить ограничение внешнего ключа.Отсутствует индекс для ограничения 'Changes_ibfk_4' в ссылочной таблице 'Рецепт'

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

Однако я понятия не имею, как эти два столбца отличаются друг от друга.Оба являются первичными ключами с одинаковым именем и типом varchar (255).Ниже приведен код MySQL.

Есть ли разница между двумя столбцами "версия"?Или проблема в чем-то другом?

alter table Recipe drop column version;
alter table Changes drop column version;
alter table Recipe add column version varchar(255);
alter table Changes add column version varchar(255);
alter table Recipe drop primary key, add primary key(recipeID, version);
alter table Changes drop primary key, add primary key(newRecipeID, version);
alter table Changes add foreign key(version) references Recipe(version);

1 Ответ

0 голосов
/ 10 мая 2019

В ссылочной таблице должен быть индекс, в котором столбцы внешнего ключа перечислены как первые столбцы в том же порядке dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.HTML в вашем примере у вас нет такого ключа в рецепте для изменения таблицы Изменения добавить ссылки внешнего ключа (версия) Рецепт (версия

)
...