我有一個自動增量字段的數據庫。我想檢索自動增量列的值,只要我在數據庫中插入一條記錄。我使用mysql作爲我的數據庫和PHP作爲我的編程語言。我嘗試使用mysql_insert_id()函數,但是當在同一時間點發生大量插入時,它不適用。從mysql數據庫中獲取自動增量ID
我想檢索AI列的值,因爲我正在爲各自的記錄存儲一個文件,因爲我將這些文件存儲在一個單獨的目錄中,所以我需要文件名稱是唯一的。任何其他方式來做同樣的事情?
我有一個自動增量字段的數據庫。我想檢索自動增量列的值,只要我在數據庫中插入一條記錄。我使用mysql作爲我的數據庫和PHP作爲我的編程語言。我嘗試使用mysql_insert_id()函數,但是當在同一時間點發生大量插入時,它不適用。從mysql數據庫中獲取自動增量ID
我想檢索AI列的值,因爲我正在爲各自的記錄存儲一個文件,因爲我將這些文件存儲在一個單獨的目錄中,所以我需要文件名稱是唯一的。任何其他方式來做同樣的事情?
它應該是安全的,你使用mysql_insert_id(),因爲它會返回當前連接的最後插入的AI值(見php.net)。因此,只要您在腳本的INSERT查詢後立即調用該方法,即使腳本多次併發運行,也不會有任何競爭條件。
看一看你也可以使用uniqid()生成一個唯一的編號,在表中插入,並使用相同的文件名。
單個刀片,你可以在一個單一的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');
的另一種方法使用SQL檢索最後插入的ID:
SELECT id FROM table ORDER BY id DESC LIMIT 1
'SELECT MAX(id)FROM table;'較短,沒有排序。 – 2012-07-22 15:57:55
當併發連接插入自己的行時,此方法不安全。 – 2012-07-22 15:58:41
但是這是一個額外的sql語句,他已經表示他關心性能。 – Nikola 2012-07-22 15:59:09
這正是我正在尋找的。謝謝你的幫助。 :) – KOR 2012-07-23 09:31:29