Вы получаете эту ошибку, потому что в таблице category
нет индекса category_name
.Измените этот оператор CREATE
следующим образом:
create table category (
category_id int primary key not null,
category_name varchar(50) not null,
KEY category_name_index (category_name)
);
Начиная с документы (версия 8.0, но это утверждение верно для более старых версий):
MySQL требует индексов для внешних ключей и ссылочных ключей, чтобы проверка внешних ключей могла быть быстрой и не требовала сканирования таблицы.В ссылочной таблице должен быть индекс, в котором столбцы внешнего ключа перечислены как столбцы first в том же порядке.Такой индекс создается в ссылочной таблице автоматически, если он не существует.Этот индекс может быть автоматически удален позже, если вы создадите другой индекс, который можно будет использовать для применения ограничения внешнего ключа.index_name
, если он указан, используется, как описано ранее.
Кроме того, вы используете varchar(50)
в качестве внешнего ключа, что обычно не является отличной идеей по ряду причин.Возможно, вы захотите использовать вместо него числовое значение, например category_id
.