我正在尝试编写一个标签系统,我希望允许用户在文本输入中插入多个标签。然后我想在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
答案 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 UPDATE
或INSERT IGNORE ...
,可能会出现错误的结果。但我没有测试过这个。