如何在多条记录插入中获取最后插入的 id?
Posted
技术标签:
【中文标题】如何在多条记录插入中获取最后插入的 id?【英文标题】:how get last inserted id in multiple record insert? 【发布时间】:2015-06-24 13:57:12 【问题描述】:我正在尝试编写一个标签系统,我希望它允许用户在文本输入中插入多个标签。然后我想在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
【问题讨论】:
只能获取第一行的插入id。可以通过使用innodb_autoinc_lock_mode
选项(可能还有其他设置)来确保 id 是连续的,但我没有尝试过,很难正确测试。
***.com/questions/4637367/…的可能重复
【参考方案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 UPDATE
或INSERT IGNORE ...
,可能会出现错误的结果。但我还没有测试过。
【讨论】:
以上是关于如何在多条记录插入中获取最后插入的 id?的主要内容,如果未能解决你的问题,请参考以下文章