2009-11-05 32 views
7

是否可以從插入多行的查詢中獲取自動遞增的ID? INSERT INTO table(col1,col2)VALUES(1,2),(3,4),(5,6);插入表格(col1,col2)。php mysql_insert_id在多行上?

另一方面,有沒有辦法找到NEXT自動增量值沒有插入任何東西到表中?

感謝

回答

4

據我所知AUTO_INCREMENT不IDS之間填補空白和操作是原子。所以你可以假設他們會連續。

+1

MySql支持自動遞增偏移量(這在複製中更常見),因此連續的ID在所有環境中都不是保證。 – webbiedave 2013-06-07 16:53:31

+0

在MySql的[下列情況](http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html)下,您可以安全地使用連續的id:您正在使用InnoDB, innodb_autoinc_lock_mode設置爲0或1(默認)。 – 2014-07-23 08:26:18

4

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

如果插入使用單個INSERT聲明多行,LAST_INSERT_ID()只返回第一個插入的行所產生的價值。

所以,不,你不能讓所有的ID很容易,但你可以假設他們是連續的。你應該從來沒有依靠假設雖然。這聽起來像你想猜測你的批量插入後會出現的下一個id?如果是這樣,甚至不要嘗試這種方式,想辦法做任何你想做的事情。 :)

0

獲得下一個AUTO_INCREMENT ID,您可以使用:

SELECT auto_increment FROM information_schema.tables WHERE table_name = 'table-you-want-to-check'; 

但是,您可能不希望依賴於你的代碼的邏輯auto_increment ID或last_insert_id()。例如,讓我們假設兩個人A & B在接近同一時刻向您的數據庫添加問題,並且您使用last_insert_id()來確定此人的問題的ID。當他們同時提交問題時會發生什麼? A或B的人是last_insert_id()

解決此問題的一種方法是使用「預定義」ID或guid作爲自動遞增ID的補充或替代。