(OT) Es recomendable usar la funcion LAST_INSERT_ID() de MySQL?

636 views
Skip to first unread message

ZeRoberto

unread,
Jul 31, 2012, 8:38:41 PM7/31/12
to publicesvfoxpro
hola a todos

hace poco tuve problemas con en la funcion LAST_INSERT_ID de mysql,
resulta que cada vez que se corta la conexion se pierde la secuencia
del autonumerico. asi que queria preguntarles que es mejor usar
LAST_INSERT_ID, crear un tabla con correlativos, o sacar el ultimo
numero de la tabla

Procedure LastID
Local lnResult
lnResult = -1
This.SQLExec("SELECT last_insert_id() As LastID", "dbQuery")
If This.SQLCode != -1
lnResult = dbQuery.LastID
Use In Select("dbQuery")
EndIf
Return (lnResult)

Procedure LastID
Parameters tcTable, tcAutoIncField
Local lnResult
lnResult = -1
This.SQLExec("SELECT " + tcAutoIncField + " AS LastID FROM " +
tcTable + " ORDER BY 1 DESC LIMIT 1", "dbQuery")
If This.SQLCode != -1
lnResult = dbQuery.LastID
Use In Select("dbQuery")
EndIf
Return (lnResult)

Saludos

Victor Espina

unread,
Jul 31, 2012, 9:17:00 PM7/31/12
to publice...@googlegroups.com
Creo que lo que hay es una confusion con respecto al uso de LAST_INSERT_ID. La funcion de esa variable es devolverte el valor asignado a la columna IDENTITY presente en el ultimo INSERT.

Es decir, si tu haces un INSERT sobre una tabla que tiene una columna IDENTITY, LAST_INSERT_ID te permitira obtener el valor asignado a dicha columna. 

Si tu cierras la conexion o haces un INSERT en otra tabla, ese valor se pierde o cambia.  Es un error comun pensar que la variable te devuelve el valor ACTUAL dentro del IDENTITY de una tabla.

Saludos

Victor Espina

Richard Gaviria

unread,
Aug 1, 2012, 1:33:47 AM8/1/12
to publice...@googlegroups.com
Correcto solo te devuelve el valor del último insert del campo autoincremental de la ultima tabla en la que hiciste tu transacción de la conexión actual, al cerrarse la conexión, se pierde ese valor.

Saludos

Rick.



Date: Tue, 31 Jul 2012 18:17:00 -0700
From: vesp...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Re: (OT) Es recomendable usar la funcion LAST_INSERT_ID() de MySQL?
--
 
 
 

Carlos Miguel FARIAS

unread,
Aug 2, 2012, 6:56:41 AM8/2/12
to publice...@googlegroups.com
Lo correcto es efectuar el INSERT y si no hay error, recuperar el valor del autoincremental inmediatamente después, si hay error al recuperar el autoincremental, ahi si se procede a recuperar esa transacción perdida.
En un entorno de muchas inserciones, si no pueden recuperar el Id, piensen en insertar de nuevo, no en buscar el último, porque el último puede que no sea el del ultimo insert del usuario que tuvo problemas, puede ser de otro usuario que alcanzo a insertar después.
Hay que tener en cuenta que la falla de la conexión (antes de recuperar el id) hace que se pierda el enlace, y la conexión se pierde dependiendo de la fiabilidad de la red.
En mi caso, cuando hago el insert, al registro nuevo le pongo un estado de "en creación", y que usuario (al menos) hizo la inserción.
Luego recupero el id, pero puede darse de que la inserción se haya hecho bien, pero falló la conexión, y a nosotros nos da error el sqlexec por falla de conexión y no por falla del insert. Entonces, en el proceso de recupero, antes de hacer un nuevo insert, recupero para ese usuario el id de instancia del último registro que tenga un estado de "creandose", si no hay, puedo hacer in nuevo insert, si aparece uno, actualizo dicho registro con los datos pertinentes, en lugar de insertar.
Saludos: Miguel, La Pampa (RA)


--
 
 
 

ZeRoberto

unread,
Aug 3, 2012, 12:53:53 PM8/3/12
to publice...@googlegroups.com
El problemaes que tengo una entrada de cabecera y detalle, en la
cabecera tengo un campo ID autoinc, una vez que logro insertar los
datos saco el ID para poder insertarlo en el detalle. Pero a veces
cuando falla la insercion, hago un ROLLBACK y se deshace el ingreso
pero el AUTOINC sigue aumentando y no disminuye al hacer el ROLLBACK.

Saludos

Miguel Canchas

unread,
Aug 3, 2012, 12:58:28 PM8/3/12
to publice...@googlegroups.com
El valor autoinc es solo para uso interno, no deberías de preocuparte por eso.

No es recomendable usarlo para números de facturas o guias o documentos correlativos...

MK

-----Mensaje original-----
De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de ZeRoberto
Enviado el: viernes, 03 de agosto de 2012 11:54 a.m.
Para: publice...@googlegroups.com
Asunto: Re: [vfp] Re: (OT) Es recomendable usar la funcion LAST_INSERT_ID() de MySQL?
--



Reply all
Reply to author
Forward
0 new messages