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 的更多信息