2011-09-21 30 views
35

我插入一些詞成兩列的表使用此命令:如何獲取MySQL中多個插入行的ID?

INSERT IGNORE INTO terms (term) VALUES ('word1'), ('word2'), ('word3'); 
  1. 我怎樣才能獲得,其中每個字被插入的行的ID(主鍵)。我的意思是在執行INSERT之後返回一個值「55,56,57」。 MySQL有這樣的迴應嗎?

  2. 術語列是UNIQUE。如果一個術語已經存在,MySQL將不會插入它。是否有可能返回此重複的參考(即該術語所在行的ID)?類似於「55,12,,56」的響應。

回答

35
  1. 你可以通過SELECT LAST_INSERT_ID();或通過具有(在任何語言)調用mysql_insert_id()你的框架/ MySQL庫得到它。

  2. 這是行不通的。你必須在插入後查詢ID。

+5

1.對於OP顯示的多行插入不起作用。 – ceejayoz

+0

+1爲正確的答案。 :D – brenjt

+2

正確 - 與「INSERT IGNORE」不一致。但是在一個非'IGNORE'中,它會給你生成並插入的第一個值。 – glglgl

3

爲什麼不乾脆:

SELECT ID 
    FROM terms 
WHERE term IN ('word1', 'word2', 'word3') 
+0

這將獲取以前插入的條款,並且它會容易受到競爭條件的影響,其中在select查詢觸發前插入記錄的競爭條件。 – ceejayoz

+2

??長期有一個獨特的條件。唯一可能影響競爭條件中的SELECT的是DELETE,而不是另一個INSERT。根據OP的帖子中的(2),他們希望包括先前插入的記錄的ID。 – mellamokb

+0

這就是我所想的;但它需要幾行編碼。除了SELECT,我需要獲取結果並在while循環中獲取它們(在我使用的php中)。我希望能找到某種類型的mysql響應。 – Googlebot

1

第一,得到剛插入的ID,你可以是這樣的:

SELECT LAST_INSERT_ID() ; 

護理,這會在您上次INSERT查詢後才工作,它只會返回第一ID如果你有多個插入!

然後,與IGNORE選項,我不認爲有可能得到未插入的行。當您製作INSERT IGNORE時,您只需告訴MySQL忽略必須創建重複條目的行。

如果您沒有使用此選項,INSERT將會停止,您將獲得有關重複的行。

+0

即使沒有IGNORE,它也只適用於單行INSERT。我的命令是多行INSERT – Googlebot

+0

只有我的答案的第一部分包括IGNORE。 –

+1

如果您使用的是PHP,那麼您可以使用每個段落中帶有一個INSERT的循環將這些ID存儲在表中。 –