错误代码: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;

但这不会显示任何错误。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...