27.7.20.3 如何获取最后插入行的唯一 ID

如果将记录插入到包含AUTO_INCREMENT列的 table 中,则可以通过调用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_query()执行SELECT LAST_INSERT_ID()语句并从该语句返回的结果集中检索该值来获取它。

插入多个值时,将返回最后一个自动递增的值。

对于LAST_INSERT_ID(),将基于每个连接在服务器中维护最近生成的 ID。另一个 Client 端未更改它。如果用非魔法值(即不是NULL而不是0的值)更新另一个AUTO_INCREMENT列,则它甚至不会更改。同时使用多个 Client 端的LAST_INSERT_ID()AUTO_INCREMENT列是完全有效的。每个 Client 端将收到 Client 端执行的最后一条语句的最后插入的 ID。

如果要使用为一个 table 生成的 ID 并将其插入第二个 table,则可以使用如下 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值。如果您存储NULL0以外的显式值,则不会影响LAST_INSERT_ID()返回的值。

有关获取AUTO_INCREMENT列中最后一个 ID 的更多信息: