【问题标题】:mysql: duplicate entry for primary keymysql:主键的重复条目
【发布时间】:2012-08-18 06:44:35
【问题描述】:

我正在运行我的 ruby​​ 脚本以加载到 mysql。它有一个错误:

Mysql::Error: 键“PRIMARY”的重复条目“4444281482”

我的主键是自动增量 ID (Big-INT)。我正在使用屏幕在具有不同数据的多个终端中运行脚本,以加载到同一个表中。这个问题以前从来没有发生过,但是当它发生时,不同终端中的所有脚本都可能会遇到这个问题。数据集不同。这似乎是随机发生的。 可能是什么原因? 为什么在自动增量字段中会有重复项?

【问题讨论】:

  • 您可能已达到数据类型的上限。此外,您的表可能已损坏,您可以尝试对其进行修复。

标签: mysql ruby


【解决方案1】:

您提到您正在使用不同的数据从不同的终端运行脚本。根据MySQL manual,假设您的引擎是InnoDB,由于每个事务针对AUTO_INCREMENT 列插入不同数量的行,引擎可能不知道将提前检索多少行。这可能解释了为什么您会收到重复的密钥错误。使用保持到语句末尾的表级锁,一次只能执行一个INSERT 语句,并且自动递增数字的生成不会交错。

【讨论】:

    【解决方案2】:

    我很确定我遇到了这个问题 - 它与客户端无关(我的意思是它可以在我的应用程序、查询浏览器、cli 客户端等中重现)。

    如果您不介意 id 编号中的空白,您可以尝试

    ALTER TABLE `tableName` AUTO_INCREMENT = 4444281492;
    

    (当然,您可以尝试添加 10 个以上的索引,例如 100000 以确保;)您始终可以使用相同的查询将计数器恢复为旧值)

    这会将您的自动增量计数器更改为更大的数字并可能跳过无效索引 - 尽管我不知道这个问题的原因是什么(在我的情况下,它在 mysqld 重新启动或整个机器重新启动期间持续存在)

    哦,我应该补充一下 - 我是在开发服务器上完成的,如果这是生产,我建议进一步调查。

    【讨论】:

      猜你喜欢
      • 2018-05-02
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 2018-05-01
      • 2017-02-17
      • 1970-01-01
      • 2020-02-02
      相关资源
      最近更新 更多