簡體   English   中英

MySQL多行插入是否會獲取順序自動增量ID?

[英]Does a MySQL multi-row insert grab sequential autoincrement IDs?

我認為這是事實,但我沒有在網上找到任何確認信息。 我可以使用last_insert_id()獲取為自動增量字段生成的第一個id,但是我可以假設下一個記錄將具有順序ID嗎? 或者其他用戶是否可以獲取ID,以便生成的ID不是連續的?

示例:插入mytable(asdf,qwer)值(1,2),(3,4),(5,6),...,(10000,10001);

如果mytable有一個自動增量列,並且如果兩個用戶同時運行此語句,一個用戶將獲取10000個連續ID,而另一個用戶將獲得下一個10000個連續ID嗎? 數百名用戶怎么樣?

謝謝。

這取決於使用的存儲引擎。

  • MyISAM保證插入的行具有順序ID,因為在插入期間保持表級鎖定。
  • InnoDB :除非innodb_autoinc_lock_mode設置為interleaved(2) ,否則插入的行將具有順序ID。 默認情況下,InnoDB在5.1和traditional模式之前以consecutive模式運行。

有關innodb_autoinc_lock_mode選項的更多信息,請參見13.6.4.3。 AUTO_INCREMENT在InnoDB中處理

如果您使用LOCK TABLES,批次應該獲取順序ID。

例:

LOCK TABLES users WRITE;
<BULK INSERT HERE>
UNLOCK TABLES;

這將防止多個線程同時寫入表。

多行插入只是一個批量操作,一遍又一遍地執行相同的操作。 觸發insert語句時,它會觸發生成ID的觸發器。

因此,如果使用數據庫引擎,則以順序方式執行其所有工作(隊列類似 - 先進先出)然后是,順序id將比前一個id高一個增量; 如果以並行方式觸發語句的多線程方式插入數據,則不會在“隨機”中給出id。

我不知道有任何mysql引擎可以保證這一點,但是我再也沒有對這個特定的主題進行過多的研究。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM