MySQL并发多行插入 - 插入ID假设

6
在我的应用程序中,有许多外键依赖关系,并且经常插入大量行。到目前为止,我所做的就是一次仅运行一个插入,并记录插入ID。即使在同一服务器上运行apache和mysql时,在插入大量行时这往往需要很长时间。
我的问题是,如果我改变我的应用程序以添加多行而不是单行插入,我是否可以根据mysql连接返回的最后一个插入ID严格假定每一行的ID?问题是偶尔会有多个人同时将大量信息放入数据库中。
从我所能确定的情况来看,似乎可以安全地假设当您插入500行时,您的插入ID将范围从(lastInsertID)到(lastInsertID + 499),无论另一个连接的查询是否在完成所需时间内开始或结束,但我想确保这被接受为安全实践。
我主要运行InnoDB,但有时也会有MyISAM。
谢谢大家!
-Jer
1个回答

5

mysql_insert_id和现在推荐的替代方法mysqli_insert_id返回最后一次运行的查询所影响表的AUTO_INCREMENT列中第一个条目的ID。

Mysql分组的INSERT语句是从第一个条目的AUTO_INCREMENT索引开始迭代插入的。因此,可以安全地假定从单个INSERT语句插入的条目是连续的。

来自Mysql参考资料的评论:“生成的ID在服务器上以每个连接为基础进行维护。这意味着函数对于给定客户端返回的值是由该客户端最近影响AUTO_INCREMENT列的语句生成的第一个AUTO_INCREMENT值。即使其他客户端生成了自己的AUTO_INCREMENT值,该值也不会受到其他客户端的影响。此行为确保每个客户端都可以检索自己的ID,而无需担心其他客户端的活动,也无需锁定或事务。


太棒了。非常感谢。 - Jerbot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接