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.