2012-07-22 131 views
0

我有一個自動增量字段的數據庫。我想檢索自動增量列的值,只要我在數據庫中插入一條記錄。我使用mysql作爲我的數據庫和PHP作爲我的編程語言。我嘗試使用mysql_insert_id()函數,但是當在同一時間點發生大量插入時,它不適用。從mysql數據庫中獲取自動增量ID

我想檢索AI列的值,因爲我正在爲各自的記錄存儲一個文件,因爲我將這些文件存儲在一個單獨的目錄中,所以我需要文件名稱是唯一的。任何其他方式來做同樣的事情?

回答

2

它應該是安全的,你使用mysql_insert_id(),因爲它會返回當前連接的最後插入的AI值(見php.net)。因此,只要您在腳本的INSERT查詢後立即調用該方法,即使腳本多次併發運行,也不會有任何競爭條件。

+0

這正是我正在尋找的。謝謝你的幫助。 :) – KOR 2012-07-23 09:31:29

0

使用uniqid()作爲文件名。 「 」根據當前時間以微秒爲單位獲取前綴唯一標識符。「

這裏php.net/manual/en/function.uniqid.php

+0

謝謝。它確實有幫助。 – KOR 2012-07-23 09:31:08

1

單個刀片,你可以在一個單一的statementto這樣做確保您得到正確的價值

僞代碼:

$query = "INSERT INTO TABLE1 VALUES(null, 'test')"; 
$id = mysql_execute("$query; SELECT LAST_INSERT_ID();" 

另一種方式可能是manuelly集ID。

讓我們說你要加1000行

1. query current ai value and store value 

2. alter table set ai value = current + 1000; 

3. make your inserts with setting ai value manually 

    INSERT INTO TABLE1 VALUES ($id, 'test$id'); 
0

的另一種方法使用SQL檢索最後插入的ID:

SELECT id FROM table ORDER BY id DESC LIMIT 1 
+0

'SELECT MAX(id)FROM table;'較短,沒有排序。 – 2012-07-22 15:57:55

+0

當併發連接插入自己的行時,此方法不安全。 – 2012-07-22 15:58:41

+0

但是這是一個額外的sql語句,他已經表示他關心性能。 – Nikola 2012-07-22 15:59:09