错误代码: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;
但这不会显示任何错误。

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

相关文章
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
29 0
|
3月前
|
存储 关系型数据库 MySQL
MySQL约束 【主键约束丨唯一约束丨非空约束丨外键级联】
MySQL约束 【主键约束丨唯一约束丨非空约束丨外键级联】
89 0
|
3月前
|
存储 关系型数据库 MySQL
⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....
⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....
98 0
|
Oracle 关系型数据库 索引
唯一约束和唯一索引区别
唯一约束和唯一索引区别
822 0
|
存储 SQL 数据可视化
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
516 2
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
|
关系型数据库 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
子查询中有个不存在的列居然不报错是bug吗?
问题描述 有开发问我这样一个问题: mysql> select * from aaa; +----+---------------------+----------+---------------------+ | id | dt | name | dtt.
1961 0
|
关系型数据库 MySQL 索引
MySQL约束——添加主键约束(联合主键)、删除主键约束
MySQL约束——添加主键约束(联合主键)、删除主键约束
1552 0
|
关系型数据库 MySQL
MySQL 非空约束位置不同对自增列造成的影响
MySQL 非空约束位置不同对自增列造成的影响MySQL版本 select version(); version() 5.7.21-log 1 row in set (0.00 sec) 非空约束为null 并在自增列属性前 即使自增列的非空约束定义可以为 null,但实际自增列为not ...
784 0
|
JSON 关系型数据库 MySQL
MySQL数据类型与字段约束
MySQL数据类型与字段约束
1498 0