首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建表时出现MySQL错误1022

创建表时出现MySQL错误1022
EN

Stack Overflow用户
提问于 2013-02-22 08:05:32
回答 2查看 29.2K关注 0票数 20

提供了以下MySQL来创建表:

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,

这特别奇怪,因为在其他几个表定义中有相同的代码,这些都是完全没有问题的!

EN

回答 2

Stack Overflow用户

发布于 2013-02-22 08:28:07

看起来您是在外键列上创建索引。在InnoDb中创建外键时,会自动创建一个外键。

See this thread

票数 2
EN

Stack Overflow用户

发布于 2013-02-22 08:22:11

尝试使用INSERT IGNORE而不是INSERT,因为如果发现重复的主键,INSERT IGNORE将不会插入新行。这应该有助于暂时解决问题,但我建议截断表。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15014592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档