3.5.9 获取最后插入行的唯一ID

如果将记录插入到包含列的表中 ,则可以通过调用该函数 AUTO_INCREMENT来获取存储在该列中的值 。mysql_insert_id()

AUTO_INCREMENT您可以通过执行以下代码(假定您已检查语句是否成功) 从 C 应用程序中检查值是否存储在列中。它确定查询是否INSERT带有 AUTO_INCREMENT索引:

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 以每个连接为基础在服务器中维护。它不会被另一个客户端更改。如果您 AUTO_INCREMENT使用非魔法值(即 notNULL和 not 的值0)更新另一列,它甚至不会更改。从多个客户端同时使用 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如果您存储or以外的显式值 0,则不会影响 返回的值 LAST_INSERT_ID()

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