错误代码:1822无法添加外键约束缺少约束索引

简介: 错误代码:1822无法添加外键约束缺少约束索引

如何解决错误代码:1822无法添加外键约束缺少约束索引?
create_user INT UNSIGNED ZEROFILL不能引用id INT,因为出于外键引用的目的,它们被视为不同的数据类型。使它们成为相同的数据类型。

外键关系中的列之间唯一允许的数据类型差异是varchar的长度。例如,VARCHAR(10)可以引用VARCHAR(20),反之亦然。

数据类型,大小或字符集的任何其他差异对于引用完整性都是不兼容的。

即使ZEROFILL在一个列上但不在另一列上也使数据类型不兼容。

解决方法
我发现了有关该错误的一些线索。但是所有解决方案都不适合我。

我为用户表创建了2个表,为文章创建了1个表。现在,我要存储创建文章的用户和最后一个修饰符的用户。

CREATE TABLE IF NOT EXISTS testDb.users (
id INT NOT NULL AUTO_INCREMENT,nickname VARCHAR(255) NULL,first_name VARCHAR(255) NULL,last_name VARCHAR(255) NULL,e_mail VARCHAR(255) NOT NULL,activated TINYINT(1) NOT NULL DEFAULT 0,birth_date DATE NULL,locked TINYINT(1) NOT NULL DEFAULT 0,locked_date_time DATETIME NULL,street VARCHAR(255) NULL,street_number VARCHAR(255) NULL,city VARCHAR(255) NULL,postal_code VARCHAR(255) NULL,country VARCHAR(255) NULL,phone VARCHAR(255) NULL,PRIMARY KEY (id),UNIQUE INDEX user_id_UNIQUE (id ASC)
)
ENGINE = InnoDB
AUTO_INCREMENT = 1;
CREATE TABLE IF NOT EXISTS testDb.articles (
id INT NOT NULL AUTO_INCREMENT,name VARCHAR(255) NULL,description VARCHAR(255) NULL,create_user INT ZEROFILL NOT NULL,create_date_time DATETIME NULL,last_modifie_user INT ZEROFILL NOT NULL,last_modifie_date_time DATETIME NULL,UNIQUE INDEX article_id_UNIQUE (id ASC),INDEX fk_articles_users1_idx (create_user ASC),INDEX fk_articles_users2_idx (last_modifie_user ASC)
)
ENGINE = InnoDB
AUTO_INCREMENT = 1;
ALTER TABLE testDb.articles
ADD CONSTRAINT fk_articles_users1

FOREIGN KEY (`create_user`)
REFERENCES `testDb`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,ADD CONSTRAINT `fk_articles_users2`
FOREIGN KEY (`last_modifie_user`)
REFERENCES `testDb`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

我收到以下错误,但我不明白为什么要为此添加索引。

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

我活跃

SHOW ENGINE innodb STATUS;
但这不会显示任何错误。

声明:地推任务网所有作品(图片、文字)均由用户自行上传分享,仅供网友学习交流。

相关文章
|
3月前
|
SQL 数据管理 数据库
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
66 0
|
存储 搜索推荐 开发工具
怎么去约束代码的统一性
当你着手的项目随着协同人员的越来越多,始终会面临着一个问题,那就是代码的统一性,俗话说,千人千面,放在代码里,也是百家争鸣,毕竟每个人都有自己的思想,也有着自己书写代码的风格,如何让一个项目,朝着一个统一的风格前去,这个是很难的,难的不是规范的制定,而是规范的落实。
|
6月前
|
存储 关系型数据库 MySQL
MySQL约束 【主键约束丨唯一约束丨非空约束丨外键级联】
MySQL约束 【主键约束丨唯一约束丨非空约束丨外键级联】
136 0
|
Oracle 关系型数据库 索引
唯一约束和唯一索引区别
唯一约束和唯一索引区别
898 0
|
SQL 关系型数据库 MySQL
列的完整性约束——设置表字段的非空约束(NOT NULL, NK)
列的完整性约束——设置表字段的非空约束(NOT NULL, NK)
|
关系型数据库 MySQL 索引
【MySQL8.0学习笔记】约束:主键约束、自增长约束、非空约束、唯一性约束、默认约束与零填充约束
文章目录 1 MySQL约束简介 2 主键约束 2.1 主键约束的操作 2.1.1 添加单列主键 2.1.2 添加多列联合主键 2.1.3 通过修改表结构的方式添加主键 2.1.4 删除主键 3 自增长约束 3.1 指定自增长字段的初始值 3.1.1 delete和truncate在删除后自增列的变化 4 非空约束 5 唯一约束 6 默认约束 7 零填充约束(zerofill)
|
关系型数据库 MySQL 索引
MySQL约束——添加主键约束(联合主键)、删除主键约束
MySQL约束——添加主键约束(联合主键)、删除主键约束
2251 0
|
SQL 开发者
约束之主键约束|学习笔记
快速学习约束之主键约束
|
SQL Oracle 关系型数据库
数据库必知词汇:唯一性约束(UNIQUE)
UNIQUE 约束唯一标识数据库表中的每条记录。UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
3840 0