如何在多个记录插入中获取最后插入的ID?

时间:2015-06-24 13:57:12

标签: php mysql

我正在尝试编写一个标签系统,我希望允许用户在文本输入中插入多个标签。然后我想在tag_table中插入每个标记,并将其ID保存在tag_post_table中。

我知道在多个插入last_insert_id中返回第一个记录ID。我可以向last_insert_id添加标签数量以获取真实的最后一个ID并使用它们之间的每个ID吗?这可靠吗?

我读过这篇文章,但我完全不明白

http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html

1 个答案:

答案 0 :(得分:1)

据我了解this article

  

innodb_autoinc_lock_mode设置为0(“传统”)或1(“连续”),任何给定语句生成的自动递增值将是连续的,没有间隙,因为表级AUTO-INC锁保持到语句结束,并且一次只能执行一个这样的语句。

innodb_autoinc_lock_mode设置为0或1可确保自动激活的ID是连续的。

因此,您从LAST_INSERT_ID获取的ID是第一个新ID,而LAST_INSERT_ID +“受影响的行数”是最后一个新ID。

同样LAST_INSTERT_ID不受其他连接的影响

  

生成的ID基于每个连接在服务器中维护。这意味着函数返回给定客户端的值是为该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。此值不受其他客户端的影响,即使它们生成自己的AUTO_INCREMENT值。此行为可确保每个客户端都可以检索自己的ID,而无需关心其他客户端的活动,也无需锁定或事务。

但请注意,如果您使用INSERT ... ON DUPLICATE KEY UPDATEINSERT IGNORE ...,可能会出现错误的结果。但我没有测试过这个。