MySQL(MyISAM)是否填充多行插入中的表空洞?

时间:2011-11-17 13:29:42

标签: php mysql insert auto-increment

我正在开发一个项目,我需要经常在远程位置插入约500个左右的记录。我将在一个INSERT中执行此操作,以最大限度地减少网络流量。但是,我需要知道确切的id字段(AUTO_INCREMENT)值。

我的网络搜索似乎表明我可以使用last_insert_id并从那里计算所有的id值。但是,如果行获得了遍布整个地方的ID,则无法使用。

有人可以澄清会发生什么或应该发生什么,以及数学解决方案是否安全?

2 个答案:

答案 0 :(得分:3)

多行插入是MySQL中的原子操作(MyISAM和InnoDB)。由于在此操作期间将锁定表以进行写入,因此在执行期间不会插入/更新其他行。

这意味着ID实际上是连续的(除非auto-increment-increment选项设置为不同于1的

答案 1 :(得分:1)

自动增量就是这样,它会自动递增 - 即每个新行接下来是数字上的下一个ID。 MySQL不会重复使用已删除行的ID。

您的解决方案是安全的,因为写操作会获取表锁,因此在您的操作完成时不会发生其他插入 - 因此您将为n插入的行获得n个连续的自动递增值。 / p>