mysql.h


Función mysql_insert_id()

my_ulonglong mysql_insert_id(MYSQL *mysql)

Devuelve el valor generado por una columna AUTO_INCREMENT para la sentencia INSERT o UPDATE previa. Usar esta función después de realizar una sentecia INSERT en una tabla que contenga una columna AUTO_INCREMENT.

Más precisamente, mysql_insert_id() se actualiza en las siguientes condiciones:

  • Sentencias INSERT que almacenen un valor en una columna AUTO_INCREMENT. Esto será cierto tanto si el valor fue generado automáticamente almacenando los valores especiales NULL ó 0 en la columna, o si se ha usado un valor explícito no especial.
  • En el caso de una sentencia INSERT de múltiples filas, mysql_insert_id() devuelve el primer valor AUTO_INCREMENT generado automáticamente; si no se a generado ninguno, se devuelve el último valor insertado explícitamente en la columna AUTO_INCREMENT.
  • Sentencias INSERT que generen un valor AUTO_INCREMENT mediante la inserción del valor LAST_INSERT_ID(expr) en cualquier columna.
  • Sentencias INSERT que generen un valor AUTO_INCREMENT mediante la actualización de cualquier columna con el valor LAST_INSERT_ID(expr).
  • El valor de mysql_insert_id() no se ve afectado por sentencias como SELECT, que devuelvan un conjunto de resultados.
  • Si la última sentencia a devuelto un error, el valor de mysql_insert_id() está indefinido.

mysql_insert_id() devuelve 0 si la sentencia previa no usa un valor AUTO_INCREMENT. Si se necesita guardar el valor para usarlo más tarde, asegurarse de llamar a mysql_insert_id() inmediatamente después de la sentencia que genera el valor.

El valor de mysql_insert_id() se ve afectado sólo por sentencias lanzadas dentro de la conexión de cliente actual. No se ve afectado por sentencias lanzadas por otros clientes.

También hay que tener en cuenta que la función SQL LAST_INSERT_ID() siempre contiene el valor AUTO_INCREMENT generado más recientemente, y no se resetea entre sentencias porque el valor de esa función es mantenido por el servidor. Otra diferencia es que LAST_INSERT_ID() no se actualiza si de asigna a una columna AUTO_INCREMENT un valor específico no especial.

El motivo de estas diferencias entre LAST_INSERT_ID() y mysql_insert_id() es que LAST_INSERT_ID() se ha diseñado para que sea fácil de usar en scripts mientras que mysql_insert_id() intenta proporcionar una información algo más exacta de lo que ocurre en una columna AUTO_INCREMENT.

Valores de retorno

Los descritos anteriormente.

Errores

Ninguno.