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

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

相关文章
|
SQL Oracle 关系型数据库
数据库必知词汇:检查约束(CHECK)
CHECK 约束用于限制列中的值的范围,限制范围取决于<Sql表达式>。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
1008 0
|
4月前
|
SQL 数据管理 数据库
|
存储 搜索推荐 开发工具
怎么去约束代码的统一性
当你着手的项目随着协同人员的越来越多,始终会面临着一个问题,那就是代码的统一性,俗话说,千人千面,放在代码里,也是百家争鸣,毕竟每个人都有自己的思想,也有着自己书写代码的风格,如何让一个项目,朝着一个统一的风格前去,这个是很难的,难的不是规范的制定,而是规范的落实。
|
7月前
|
存储 关系型数据库 MySQL
⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....
⑦【MySQL】什么是约束?如何使用约束条件?主键、自增、外键、非空....
260 0
|
Oracle 关系型数据库 索引
唯一约束和唯一索引区别
唯一约束和唯一索引区别
936 0
|
关系型数据库 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)
|
SQL 数据库
数据库必知词汇:非空约束(NOT NULL)
NOT NULL 约束强制列不接受 NULL 值。NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
822 0
|
SQL Oracle 关系型数据库
数据库必知词汇:唯一性约束(UNIQUE)
UNIQUE 约束唯一标识数据库表中的每条记录。UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
3937 0
|
关系型数据库 MySQL
MySQL 非空约束位置不同对自增列造成的影响
MySQL 非空约束位置不同对自增列造成的影响MySQL版本 select version(); version() 5.7.21-log 1 row in set (0.00 sec) 非空约束为null 并在自增列属性前 即使自增列的非空约束定义可以为 null,但实际自增列为not ...
793 0
|
SQL MySQL 关系型数据库
(细节)My SQL中主键为0和主键自排约束的关系
开始不设置主键 表的设计如下: 如果id的位置有好几个0的话:设置主键并且自动排序时,0会从1开始递增;   Insert 进去 id = 0的数据,数据会从实际的行数开始增加,和从0变化不一样;   现在主键是没有0的,如果把某个id改成0的话,0不会变!直接会进行排序;   ...
1170 0

相关实验场景

更多