Код ошибки: 1822. Не удалось добавить ограничение внешнего ключа.Отсутствует индекс для ограничения «questions_ibfk_1» в ссылочной таблице «категория» - PullRequest
0 голосов
/ 12 мая 2019

не может добавить ограничение внешнего ключа в таблицу

create table users
(
user_id int  auto_increment  primary key  not null,
username varchar(50)    unique null ,
email varchar(50)   unique  ,
passwords varchar(50) not null,
login_status boolean not null  
);

create table category (
 category_id int  primary key not  null,
 category_name varchar(50) not null
 );

 create table answers (
id_answer int  auto_increment  primary key not null,
answer boolean  not null
);

create table questions  ( 
question_id int primary key not null,
 category_name varchar(50) not null,
content varchar(50) not null ,
 foreign key (category_name) references category (category_name)
 );

1 Ответ

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

Вы получаете эту ошибку, потому что в таблице 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.

...