3.6.11 取得最後插入列的唯一 ID

如果您將記錄插入到包含 AUTO_INCREMENT 資料行的資料表中,您可以呼叫 mysql_insert_id() 函式,取得儲存在該資料行的值。

您可以從 C 應用程式檢查值是否儲存在 AUTO_INCREMENT 資料行中,方法是執行以下程式碼(假設您已檢查語句是否成功)。它判斷查詢是否為具有 AUTO_INCREMENT 索引的 INSERT

if ((result = mysql_store_result(&mysql)) == 0 &&
    mysql_field_count(&mysql) == 0 &&
    mysql_insert_id(&mysql) != 0)
{
    used_id = mysql_insert_id(&mysql);
}

當產生新的 AUTO_INCREMENT 值時,您也可以透過執行 SELECT LAST_INSERT_ID() 語句,並使用 mysql_real_query()mysql_query() 函式,然後從該語句傳回的結果集中擷取值,來取得該值。

當插入多個值時,會傳回最後一個自動遞增的值。

對於 LAST_INSERT_ID(),最近產生的 ID 會在伺服器中按每個連線維護。它不會被另一個用戶端變更。即使您使用非魔術值(也就是說,不是 NULL 且不是 0 的值)更新另一個 AUTO_INCREMENT 資料行,它也不會變更。從多個用戶端同時使用 LAST_INSERT_ID()AUTO_INCREMENT 資料行完全有效。每個用戶端都會接收該用戶端所執行的最後一個語句的最後插入 ID。

如果您想要使用為一個資料表產生的 ID,並將其插入到第二個資料表,您可以使用如下的 SQL 語句

INSERT INTO foo (auto,text)
    VALUES(NULL,'text');         # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
    VALUES(LAST_INSERT_ID(),'text');  # use ID in second table

mysql_insert_id() 會傳回儲存在 AUTO_INCREMENT 資料行中的值,無論該值是透過儲存 NULL0 自動產生,還是指定為明確的值。LAST_INSERT_ID() 僅傳回自動產生的 AUTO_INCREMENT 值。如果您儲存明確的值(而非 NULL0),它不會影響 LAST_INSERT_ID() 傳回的值。

如需更多關於取得 AUTO_INCREMENT 資料行中最後 ID 的資訊