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