【发布时间】:2014-12-07 09:57:40
【问题描述】:
我发现了一些关于该错误的线索。但是所有的解决方案都不适合我。
我创建了 2 个表,一个用户表,一个用于文章。现在我想存储创建文章的用户和最后一个修饰符。
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,
PRIMARY KEY (`id`),
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;
但这并没有显示任何错误。
【问题讨论】:
-
如果将
id声明为主键,则不需要单独的唯一索引。我的猜测是两者都会混淆 MySQL。 -
我试过没有UNIQUE,还是一样的问题。
-
。 .您声称有两个表,但代码引用了三个。没有
recipes- 很难确定问题出在哪里。 -
对不起,你是对的。我将一些代码混合在一起。我编辑它。
-
谁否决了这个问题? =( 仍然没有解决,它似乎不是像不同数据类型这样的常见错误之一
标签: mysql sql foreign-keys