【问题标题】:MYSQL insert records skipping ids (Auto Increment)MYSQL插入记录跳过ID(自动增量)
【发布时间】:2012-02-22 10:43:39
【问题描述】:

我是一个相当新的 php 程序员,似乎无法弄清楚在我的 MySQL 数据库中插入记录时哪里出错了:

我的测试脚本(用于学习目的)调用 eBay API 并将请求的信息下载到 MySQL 数据库中,但我似乎遇到了脚本在自动增量上跳过 ID 的问题。从我在这里阅读的内容来看,这通常是记录已被删除的情况,但对我而言并非如此,因为没有删除任何记录,而且差距越来越大。

我的问题是:是否有其他东西可以导致 id 跳过随机数?

数据库示例: 数字从 1 到 21 运行良好,但随后变为:28、43、51、55、58 我已经检查了,下一个要添加的应该是 59:

show create table 'tbl'

【问题讨论】:

  • 向我们展示您的 php 代码、sql 插入和表创建
  • 失败/回滚的交易也会导致这种情况。 ID 不会重复使用/回收。缺乏顺序性会导致问题吗?
  • 你在通过插入查询传递 id 吗???
  • 嗨,戴夫,我会发布这个,但它有很多敏感数据,如果有帮助,我可以通过电子邮件发送它吗?但我正在寻找更多信息,然后是快速修复。感谢您的宝贵时间
  • 没有办法阻止它。这就是您的数据库的工作方式。使用它自己的字段来跟踪它。让它独一无二,这样你就知道没有重复。请每个问题只问一个问题。如果你愿意,你可以分开问两个(我删除了第二个问题)

标签: php mysql auto-increment


【解决方案1】:

您的代码是否使用事务?如果您回滚插入该表的事务,即使事务被回滚,它也不会回滚身份计数器。

看到这个问题:MySQL table with AUTO_INCREMENT primary id does not release the number after a rollback

【讨论】:

  • 嗨,John,该脚本确实提取了事务,但应将它们全部输入数据库,因为它们在此之后排序。没有删除/回滚来测试我将清空数据库并检索 25 个新的,它们应该以 1-25 的形式进入,但似乎仍然跳过了一些 id
  • 嗨约翰,检查了这个,但我没有删除任何 id,所以这个差距不应该是由此造成的谢谢你的时间
  • 我想你误会了。如果您的代码在回滚的事务中添加行,则不会回滚标识增量。我没有说任何关于删除 id 的内容。
【解决方案2】:

我有点猜测代码会是什么样子,因为我现在也在使用 PayPal API,但这里有一种方法可以让 auto_increment 完成它的工作

这就是我的 INSERT 命令的样子并且它一直在工作。但是提供一些代码肯定会有所帮助。

"INSERT INTO `table` (auto_increment_id, field1, field2, field3) VALUES ('','$field1','$field2','$field3')";

如果您将第一个 () 留空并在 VALUES 之后放置值,则 必须去每个领域,但按照我向你展示的方式,你说 哪个字段应该得到什么值。

要连接到实时数据库,您可以使用 SQLite。它们被称为数据库浏览器。

【讨论】:

  • 嗨,Grigor,我现在试试看,看看我的表现如何,尽管我确实认为在值中包含 NULL 也能起到同样的作用?非常感谢,
  • 我实际上没有尝试使用 NULL,因为这种方式对我来说总是有效的。
猜你喜欢
  • 2015-07-05
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2014-05-06
相关资源
最近更新 更多