我正在运行我的ruby脚本以加载到mysql。它有一个错误:
Mysql :: Error:键'PRIMARY'的重复条目'4444281482'
我的主键是自动递增ID(Big-INT)。我使用屏幕在多个终端中运行具有不同数据的脚本,以加载到同一个表中。这个问题以前从未发生过,但是当它发生时,不同终端中的所有脚本都可能遇到这个问题。数据集不同。它似乎是随机发生的。 可能是什么原因? 为什么在自动增量字段中会出现重复?
答案 0 :(得分:0)
我很确定我遇到了这个问题 - 它与客户端无关(我的意思是它在我的应用程序,查询浏览器,cli客户端等中都可以重现)。
如果你不打扰你的身份编号中的空白,你可以尝试
ALTER TABLE `tableName` AUTO_INCREMENT = 4444281492;
(当然你可以尝试添加10个以上的索引,比如100000;)你总是可以使用相同的查询将计数器恢复为旧值。)
这会将您的自动增量计数器更改为更大的数字,并可能跳过无效索引 - 虽然我不知道这个问题的原因是什么(在我的情况下它坚持durign mysqld restart或整个机器重启)
哦,我应该添加 - 我在开发服务器上做了,如果这是生产我会建议进一步调查。
答案 1 :(得分:0)
您提到使用不同的数据从不同的终端运行脚本。根据{{3}},假设您的引擎是InnoDB,由于每个事务都在AUTO_INCREMENT
列上插入不同的行数,因此引擎可能不知道将提前检索多少行。这可能解释了为什么您收到重复键错误。通过在语句末尾使用表级锁定,一次只能执行一个INSERT
语句,并且自动递增数字的生成不会交错。