2008-10-03 72 views
8

在mysql中,當自動增量時,如何獲得用於插入操作的主鍵。關於主鍵和插入的簡單mysql問題

基本上,我希望當語句完成時返回新的autoincremented值。

謝謝!

+0

說明: 代碼已插入然後一個last_insert_id。這些語句中的兩個在同一時間幾乎執行和EXEC命令變成 插入#1 插入#2 LAST_INSERT_ID#1完成和插入#2 LAST_INSERT_ID#2完成之後返回的ID和插入#返回ID 2 這可能發生嗎? – MPX 2008-10-03 00:30:29

回答

12

您的澄清評論說,如果另一個併發INSERT發生,您有興趣確保LAST_INSERT_ID()不會給出錯誤的結果。請放心,無論其他併發活動如何,使用LAST_INSERT_ID()都是安全的。 LAST_INSERT_ID()僅返回當前會話期間生成的最新ID。

你可以自己嘗試一下:

  1. 打開兩個shell窗口,運行mysql客戶 每個並連接到數據庫 。
  2. Shell 1:用 AUTO_INCREMENT鍵將數據插入到表格中。
  3. Shell 1:SELECT LAST_INSERT_ID(), 查看結果。
  4. Shell 2:INSERT到同一個表中。
  5. 殼2:SELECT LAST_INSERT_ID(), 看到結果從殼1
  6. 外殼1不同:再次選擇LAST_INSERT_ID() ,見前面 結果的重複。

如果你考慮一下,這是唯一有意義的方法。所有支持自動遞增密鑰機制的數據庫都必須採用這種方式。如果結果取決於與其他客戶端的爭用情況可能同時進行INSERT,那麼在當前會話中沒有可靠的方法來獲取最後插入的ID值。

+0

謝謝!正是我想要的。 – MPX 2008-10-03 00:46:29

0

[從table_name的選擇MAX(primary_key_column_name) 唉唉不nessecarily。我不是一個MySQL的人,但有特定的方法來獲取最後完成的動作的最後一個插入的id,比這更強大一點。如果在寫入表格和查詢之間發生了插入操作,該怎麼辦?我知道,因爲它刺痛了我很多月前(所以是的,它確實發生)。 如果所有的錯誤都沒有閱讀手冊:http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html