If you insert a record into a table that contains an
AUTO_INCREMENT column, you can obtain the
value stored into that column by calling the
mysql_insert_id() function.
You can check from your C applications whether a value was
stored into an AUTO_INCREMENT column by
executing the following code (which assumes that you've
checked that the statement succeeded). It determines whether
the query was an INSERT with an
AUTO_INCREMENT index:
if ((result = mysql_store_result(&mysql)) == 0 &&
mysql_field_count(&mysql) == 0 &&
mysql_insert_id(&mysql) != 0)
{
used_id = mysql_insert_id(&mysql);
}
For more information, see Sección 24.2.3.34, “mysql_insert_id()”.
When a new AUTO_INCREMENT value has been
generated, you can also obtain it by executing a
SELECT LAST_INSERT_ID() statement with
mysql_query() and retrieving the value from
the result set returned by the statement.
For LAST_INSERT_ID(), the most recently
generated ID is maintained in the server on a per-connection
basis. It is not changed by another client. It is not even
changed if you update another
AUTO_INCREMENT column with a non-magic
value (that is, a value that is not NULL
and not 0).
If you want to use the ID that was generated for one table and insert it into a second table, you can use SQL statements like this:
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
Note that mysql_insert_id() returns the
value stored into an AUTO_INCREMENT column,
whether that value is automatically generated by storing
NULL or 0 or was
specified as an explicit value.
LAST_INSERT_ID() returns only automatically
generated AUTO_INCREMENT values. If you
store an explicit value other than NULL or
0, it does not affect the value returned by
LAST_INSERT_ID().
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.
