如果您將記錄插入到包含 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
資料行中的值,無論該值是透過儲存 NULL
或 0
自動產生,還是指定為明確的值。LAST_INSERT_ID()
僅傳回自動產生的 AUTO_INCREMENT
值。如果您儲存明確的值(而非 NULL
或 0
),它不會影響 LAST_INSERT_ID()
傳回的值。
如需更多關於取得 AUTO_INCREMENT
資料行中最後 ID 的資訊
如需關於
LAST_INSERT_ID()
的資訊(可在 SQL 語句中使用),請參閱 資訊函式。如需關於
mysql_insert_id()
的資訊(您從 C API 內部使用的函式),請參閱第 5.4.42 節,「mysql_insert_id()」。如需關於在使用 Connector/J 時取得自動遞增值的資訊,請參閱透過 JDBC 擷取
AUTO_INCREMENT
資料行值。如需關於在使用 Connector/ODBC 時取得自動遞增值的資訊,請參閱取得自動遞增值。