繁体   English   中英

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

[英]MySQL concurrent multi-row inserts - Insert ID Assumption

在我的应用程序中,我有很多外键依赖项,并且经常插入大量行。 到目前为止,我所做的只是一次运行单个插入,并记录插入ID。 即使在同一台服务器上运行apache和mysql时,插入大量行时也趋于花费很长时间。

我的问题是,如果我要更改应用程序以使用单个INSERT添加许多行,我是否能够严格基于mysql连接返回的最后一个插入ID来假设每一行的ID? 问题是,偶尔会有多个人一次将大量信息放入数据库中的情况。

根据我的判断,可以安全地假设,当您插入500行时,无论来自另一个连接的查询是开始还是结束,插入ID的范围都是(lastInsertID)到(lastInsertID + 499)。完成所需的时间,但我想确定这是安全的做法。

我主要在运行InnoDB,但偶尔也有MyISAM。

谢谢大家!

-杰尔

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM