MySQL工作台想出了下面的SQL创建一个表:
CREATE TABLE IF NOT EXISTS `mydb`.`errors_reports` (
`error_id` INT NOT NULL ,
`report_short` VARCHAR(15) NOT NULL ,
PRIMARY KEY (`error_id`, `report_short`) ,
INDEX `error_id_idx` (`error_id` ASC) ,
INDEX `report_short_idx` (`report_short` ASC) ,
CONSTRAINT `error_id`
FOREIGN KEY (`error_id` )
REFERENCES `mydb`.`errors` (`error_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `report_short`
FOREIGN KEY (`report_short` )
REFERENCES `mydb`.`reports` (`report_short` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
这看起来好像没什么问题,而且还有一堆在我的数据库等非常相似的表内,以MySQL的是完全乐于创造的。
但是,这一个...
ERROR 1022 (23000): Can't write; duplicate key in table 'errors_reports'
我不能为我的生活看不到任何重复的键在这里。 这里只有一个键定义!
我运行MySQL 5.6用新鲜的默认安装。 没有什么错误日志。
想法?
编辑:通过排除法(要回表的最简单可行的定义,然后逐渐加入位回)的问题似乎是这一点:
CONSTRAINT `error_id`
FOREIGN KEY (`error_id` )
REFERENCES `mydb`.`errors` (`error_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
这是特别奇数,因为在其他几个表定义相同代码和那些是完全没有问题!