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
值。如果您存储NULL
或0
以外的显式值,则不会影响LAST_INSERT_ID()返回的值。
有关获取AUTO_INCREMENT
列中最后一个 ID 的更多信息:
-
有关可以在 SQL 语句中使用的LAST_INSERT_ID()的信息,请参见第 12.15 节“信息功能”。
-
有关mysql_insert_id()(您在 C API 中使用的函数)的信息,请参阅第 27.7.6.38 节“ mysql_insert_id()”。
-
有关在使用 Connector/J 时获取自动递增值的信息,请参阅通过 JDBC 检索 AUTO_INCREMENT 列值。
-
有关在使用连接器/ ODBC 时获取自动递增值的信息,请参见获取自动增量值。