domingo, 20 de marzo de 2016

[Mysql] Como retornar el ID despues de una instrucción Insert







Mysql es un motor de base de datos que regularmente lo vamos a encontrar mas frecuentemente con la gran cantidad de servicios que utilizan este gestor, por lo que se nos presentan tareas que pensaria uno que es muy común sin embargo generan problemas. Muchas veces es necesario dentro de un procedimiento obtener el ultimo Id numérico para usarlo en la siguiente consulta en este caso te van algunas sugerencias. 

Tienes que la llave es numérica e incremental 

Cuando se tiene este caso, automaticamente sabemos que el Id es el numero mas grande podemos utilizar el método MAX para obtener el último registro

   Select MAX(idPruebas) from pruebas;


Tienes que la llave es autonumérica

Cuando tiene estas características puedes usar el Identity o la función Last_Insert_ID cualquiera de las dos te puede ayudar. 

   -- Aqui va el insert (necesario ejecutar identity despues del mismo) 
   SELECT @@identity AS id;


   -- Aqui va el insert (necesario ejecutar last_insert_id despues del mismo) 
   SELECT LAST_INSERT_ID();

En este caso, si ejecutas la siguiente operación que permite ingresar mas de un registro en una sola linea, regresara el del primer registro, ademas recordemos que last_insert_id maneja la sesión por lo que si estas en otra sesión no podrás recuperar el Id porque no esta guardado en la cache. 
   INSERT INTO pruebas(id, nombre) VALUES (1,"Uno"), (2,"Dos"), (3,"Tres");

Tienes un campo de Fecha/Hora que te permita ordenar 

En el caso de que tengas este campo y no tengas posibilidad de comparar numéricamente puedes usar un ordenamiento en inverso que permitirá traer el id. 
   Select idPruebas from pruebas order by hora desc limit 1;

Ninguna de las anteriores 

   Set @idVirtual:=0;
   Select @idVirtual:=@idVirtual+1, idPruebas from pruebas order by @idVirtual desc limit 1;

How to Get the Unique ID for the Last Inserted Row 

 

 

No hay comentarios:

Publicar un comentario