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 值時,您也可以執行帶有 mysql_real_query()mysql_query()SELECT LAST_INSERT_ID() 語句,並從語句傳回的結果集中檢索該值來取得它。

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

對於 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 的更多資訊