如果您将记录插入到包含 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 that。
如果您想使用为一个表生成的 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 时获取自动递增值的更多信息,请参阅 获取自动递增值。