2010-05-21 50 views
4

我希望將一些數據插入到表如何做多插入和獲得IDS

(id PK autoincrement, val) 

與使用多插入

INSERT INTO tab (val) VALUES (1), (2), (3) 

是否有可能獲得最後插入的ID的表?

我要求becouse我不確定是否所有將在這種形式:(n,n + 1,n + 2)。

我使用mysql inodb。

+1

重複http://stackoverflow.com/questions/1679295/php-mysql-insert-id-on-multiple-rows – mdma 2010-05-21 14:57:13

+0

@mdma:不幸的是,這個問題的答案是不正確的。 – webbiedave 2010-05-21 15:28:30

回答

2

mysql docs

如果插入使用 單INSERT語句多行, LAST_INSERT_ID()返回 只有第一個插入的行生成的值 。這樣做的原因是使 它可以輕鬆地再現對其他服務器的某些 相同的INSERT語句 。

+0

好的,但是下一個會增加1?或者是否有來自2個獨特插入的插入ID的可能性 – liysd 2010-05-21 14:54:33

+1

我99%確定它們總是連續的。唯一會干擾這種情況的是,如果將auto_increment值設置爲較低的數字,並且「id」列有「漏洞」 – Josh 2010-05-21 14:57:14

+0

不要依賴替代方法來檢索最後一個插入ID(總是會有一場比賽) 。如果您需要每個ID,請一次插入一個ID。 – webbiedave 2010-05-21 14:57:38

1

Here's有人在mysql論壇上問同樣的問題,但沒有給出真正權威的答案。他們着陸'爲了安全起見,先鎖定桌子。那麼你可以指望順序的ID。「

我的建議是這樣的:

如果要插入多行,不介意阻塞其他線程,鎖定表,執行插入,然後解鎖。由於表被鎖定,所以可以指望插入的ID是連續的(或者你的自動增量設置是什麼)。

如果您正在進行少量插入操作或者不想阻止其他線程,只需一次執行一個插入操作,並在每次之後調用last_insert_id()。

+0

您必須先在更改增量規則時檢查自動增量增量和自動增量偏移的設置。 – webbiedave 2010-05-21 15:06:24

+0

是的,當然。這個問題似乎暗示列定義指定遞增1。 – grossvogel 2010-05-21 15:30:03