我正在开发一个项目,我需要经常在远程位置插入约500个左右的记录。我将在一个INSERT
中执行此操作,以最大限度地减少网络流量。但是,我需要知道确切的id
字段(AUTO_INCREMENT
)值。
我的网络搜索似乎表明我可以使用last_insert_id
并从那里计算所有的id值。但是,如果行获得了遍布整个地方的ID,则无法使用。
有人可以澄清会发生什么或应该发生什么,以及数学解决方案是否安全?
答案 0 :(得分:3)
多行插入是MySQL中的原子操作(MyISAM和InnoDB)。由于在此操作期间将锁定表以进行写入,因此在执行期间不会插入/更新其他行。
这意味着ID实际上是连续的(除非auto-increment-increment选项设置为不同于1的
答案 1 :(得分:1)
自动增量就是这样,它会自动递增 - 即每个新行接下来是数字上的下一个ID。 MySQL不会重复使用已删除行的ID。
您的解决方案是安全的,因为写操作会获取表锁,因此在您的操作完成时不会发生其他插入 - 因此您将为n
插入的行获得n
个连续的自动递增值。 / p>