mysql-workbench - 错误代码:1822。添加外键约束失败。引用表 'category' 中的约束 'questions_ibfk_1' 缺少索引
问题描述
无法向表添加外键约束
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)
);
解决方案
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)
);
来自文档(8.0 版本,但该声明适用于旧版本):
MySQL 需要外键和引用键上的索引,以便外键检查可以快速且不需要表扫描。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列。如果引用表不存在,则会在引用表上自动创建此类索引。如果您创建另一个可用于强制外键约束的索引,则此索引可能会在稍后被静默删除。
index_name
,如果给定,则如前所述使用。
此外,您使用 avarchar(50)
作为外键,由于各种原因,这通常不是一个好主意。您可能想要使用数值,例如category_id
, 。
推荐阅读
- r - 如何将缺失值添加到R中的向量
- php - 个人数据库查询 TYPO3 流体扩展
- angular - Angular Azure AD Msal broadCastService msal:loginTokenSuccess 不起作用
- php - 当我上传图像并调整大小时,来自服务器的 500 问题
- c# - StubbleOrg(mustache) 配置日期格式
- r - 尝试将列表存储在长度为 1 的 data.table 中时出错
- c - 在 C 中的一行中用随机字节填充多维数组
- python - 如何启用 Windows 的 scp 以在 Python 中使用?
- c - 我的链接列表中的作业不起作用
- php - PHP 中 DATETIME 字段 MS-SQL 的问题