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