无法向表添加外键约束
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)
);
答案 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
。