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

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

相关文章
|
存储 缓存 Oracle
|
6月前
|
监控 数据可视化 安全
看得见的安全:如何用可视化大屏提升数据监测和网络预警效率
网络安全已成各组织核心议题,传统防护难以应对复杂攻击。AnaTraf网络流量分析仪通过实时分析流量,提取关键行为,提前发现潜在威胁。其可视化大屏将数据直观呈现,助力安全人员快速捕捉风险。系统基于趋势分析构建动态风险模型,实现预判而非仅报警,成为有判断力的“网络安全参谋”。在攻击无孔不入的时代,AnaTraf提供全新认知方式,以“看得见”提升对威胁的判断力。
看得见的安全:如何用可视化大屏提升数据监测和网络预警效率
|
应用服务中间件 nginx
nginx405异常原因与解决方法,最详细解释
nginx405异常原因与解决方法,最详细解释
966 1
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的自适应学习算法研究与应用
在深度学习领域,传统的静态模型在处理动态环境和非平稳数据时面临挑战。本文探讨了自适应学习算法在深度学习中的重要性及其应用。通过分析自适应学习算法在模型参数、损失函数和数据分布上的应用,展示了其在提升模型鲁棒性和泛化能力方面的潜力。具体讨论了几种代表性的自适应学习方法,并探索了它们在现实世界中的应用案例,从而展示了其在处理复杂问题和动态数据中的效果。
785 0
|
SQL 数据库 开发者
SQL 语言:完整性约束
SQL 语言:完整性约束
437 3
|
分布式计算 资源调度 Hadoop
Hadoop 1 与 Hadoop 2 的区别详解
【8月更文挑战第31天】
461 0
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】第一部分:ChatGPT的基本概念和技术背景
【人工智能】第一部分:ChatGPT的基本概念和技术背景
554 6
【洛谷 P1443】马的遍历 题解(广度优先搜索)
该问题是一个棋盘上的马的最短路径问题。给定一个$n\times m$的棋盘和起点$(x, y)$,需要计算马到达棋盘上每个位置的最短步数。输入包含$n, m, x, y$,输出是一个矩阵,表示各位置的步数或未可达的$-1$。使用广度优先搜索(BFS)策略,从起点开始遍历,直到访问完所有可达位置。代码中定义了太阳数组表示马的移动方向,并通过队列实现BFS。最后输出格式要求每个数字左对齐且域宽为5。
213 0
|
Prometheus 监控 安全
Java一分钟之-Spring Boot Actuator:健康检查与监控
【6月更文挑战第7天】Spring Boot Actuator 提供了丰富的监控和管理端点,如健康检查、性能监控。要启用Actuator,需添加依赖并配置暴露端点。健康检查可自定义,性能监控可通过Metrics结合Micrometer集成外部系统。安全配置很重要,可以使用Spring Security保护端点。日志和环境信息管理则可通过`/loggers`和`/env`端点。正确使用Actuator能提升应用的可观察性和维护性。
1095 1
|
Python
【Python】已解决:(cmd进入Python环境报错)No Python at ‘C:\Users…\Python\Python39\python.exe’
【Python】已解决:(cmd进入Python环境报错)No Python at ‘C:\Users…\Python\Python39\python.exe’
3341 0