错误代码:1822。无法添加外键约束。引用表“类别”中约束“ questions_ibfk_1”的缺少索引

时间:2019-05-12 04:01:27

标签: mysql-workbench

无法向表添加外键约束

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 :(得分:0)

您会收到此错误,因为category_name表中category上没有索引。更改该CREATE语句,如下所示:

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

来自the docs(8.0版本,但该声明适用于旧版本):

  

MySQL要求在外键和引用键上建立索引,以便外键检查可以快速进行,而无需进行表扫描。在引用表中,必须有一个索引,其中外键列以相同的顺序列为 first 列。如果这样的索引不存在,则会在引用表上自动创建。如果您创建另一个可用于强制外键约束的索引,则以后可能会静默删除该索引。 index_name(如果有的话)的使用方法如上所述。

此外,您正在使用varchar(50)作为外键,由于多种原因,这通常不是一个好主意。您可能想改用数字值,例如category_id