簡體   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