2009-09-17 46 views
4
INSERT INTO details (idactivity,user,hours,val,date) VALUES ('981','133','0','10500','2008-07-01'),('981','184','0','2750','2008-07-01'),('981','184','0','2750','2008-07-01') 

(iddetails的詳細信息表PK)我可以從批量插入中檢索lastInsertId嗎?

有沒有辦法來獲得3個新iddetails和他們去一個新的批量插入查詢?

INSERT INTO activity (idactivity,iddetails) VALUES('981',??),('981',??),('981',??) 

回答

2

據我所知,沒有mysql

3

我認爲你必須一次完成一個初始插入。 MySQL的last_insert_id只會給你使用多行插入語句插入的第一個元素的id。如果您有多個進程同時插入行,則可能會出現問題。

但是,(我還沒有驗證這一點,)如果你正使用InnoDB表,然後應該在一個隱式事務執行的語句,所以你應該能夠假設生成的ID分別爲順序。

的另一種方式,再次,如果你有交易,是鎖定表,並對其進行更新手動的AUTO_INCREMENT屬性。例如,如果您要插入50行,然後將其填充50.然後解鎖表格並插入行,明確使用您保留的ID。您需要爲此轉換(或至少表鎖),以便不讀取AUTO_INCREMENT,然後在更新之前讓其他人插入新行。

+0

」應該能夠認爲生成的ID是連續的「 - 不是沒有鎖定桌面的拳頭。 – symcbean 2011-09-09 11:20:56

5

還有就是behavior of last_insert_id() with multi-row insert statements在MySQL手冊的詳細討論。用「重要」一詞開頭的紅色垂直條部分向下滾動一點。

+0

鏈接不工作了 - 這裏是正確的http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id – Horen 2012-10-10 14:32:04

+0

@霍倫我剛剛更新了鏈接到最新的文檔(5.6)。我想知道他們爲什麼刪除了5.4。 – Asaph 2012-10-10 15:59:04

0

如果您使用的日期時間,而不只是一個日期,你可以查找基於用戶和datetime值插入的ID,但它可能是,如果你需要的數據更好,所以只是不能做批量插入。否則,你最終會運行更多的查詢。

+0

不唯一 - CONNECTION_ID()會更好,但仍可能導致持久連接出現別名,除非與事務標誌組合。 – symcbean 2011-09-09 11:19:51

0

您可以添加一個數據庫字段的GUID並存儲一個隨機與每個記錄。然後另一個查詢可以提取的ID

-2

使用SELECT LAST_INSERT_ID();查詢你可以得到最後插入的id。 「

相關問題