mysql:主键的重复条目

时间:2012-08-22 19:18:35

标签: mysql ruby

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

  

Mysql :: Error:键'PRIMARY'的重复条目'4444281482'

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

2 个答案:

答案 0 :(得分:0)

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

如果你不打扰你的身份编号中的空白,你可以尝试

ALTER TABLE `tableName` AUTO_INCREMENT = 4444281492;

(当然你可以尝试添加10个以上的索引,比如100000;)你总是可以使用相同的查询将计数器恢复为旧值。)

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

哦,我应该添加 - 我在开发服务器上做了,如果这是生产我会建议进一步调查。

答案 1 :(得分:0)

您提到使用不同的数据从不同的终端运行脚本。根据{{​​3}},假设您的引擎是InnoDB,由于每个事务都在AUTO_INCREMENT列上插入不同的行数,因此引擎可能不知道将提前检索多少行。这可能解释了为什么您收到重复键错误。通过在语句末尾使用表级锁定,一次只能执行一个INSERT语句,并且自动递增数字的生成不会交错。