Foros del Web » Programando para Internet » PHP »

Guardar id de un registro antes que otro usuario lo genere

Estas en el tema de Guardar id de un registro antes que otro usuario lo genere en el foro de PHP en Foros del Web. Hola amigos, tengo una duda al parecer sencilla pero me ha dado dolores de cabeza. Resulta que estoy guardando en una tabla el registro de ...
  #1 (permalink)  
Antiguo 05/05/2015, 09:50
 
Fecha de Ingreso: enero-2010
Mensajes: 47
Antigüedad: 14 años, 2 meses
Puntos: 0
Guardar id de un registro antes que otro usuario lo genere

Hola amigos, tengo una duda al parecer sencilla pero me ha dado dolores de cabeza.
Resulta que estoy guardando en una tabla el registro de un pedido la cual me genera un id, pero aparte de insertar ese registro en esa tabla pedido estoy guardando otro registro en una tabla abono y quiero guardar el id del registro insertado en tabla pedido en esta tabla que por lógica es el ultimo, se que puedo utilizar mysql_insert_id() para obtener el ultimo id.

Pero el asunto es que pasara si son muchos usuarios que manejan el sistema y por la casualidad si 5 de esos muchos, al mismo tiempo generan un pedido no pueden guardarse los id de la tabla pedido en la tabla abono del otro...

Nose si me explique...
  #2 (permalink)  
Antiguo 05/05/2015, 12:07
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Guardar id de un registro antes que otro usuario lo genere

Salvo que la operación de guardar los datos en la segunda tabla la hagas en otro momento o hayas cerrado la conexión, no hay riesgo de colisión, ya que si revisas el manual, mysql_insert_id() hace referencia sólo a la conexión actual (como una sesión) sin verse afectada por otras conexiones de otros usuarios.
  #3 (permalink)  
Antiguo 05/05/2015, 12:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Guardar id de un registro antes que otro usuario lo genere

Lo que necesitas es algo que sale en e lmanual de MySQL, lo que se hace es un bloqueo de tabla

VEr: 14.5.5 AUTO_INCREMENT Handling in InnoDB

En especial este caso:
14.5.5.1 Traditional InnoDB Auto-Increment Locking

Donde uno de los métodos es:
Código MySQL:
Ver original
  1. SELECT MAX(ai_col) FROM table_name FOR UPDATE;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 08/05/2015, 07:43
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Guardar id de un registro antes que otro usuario lo genere

Hola gnzsoloyo, ¿por qué no vale mysql_insert_id? Si es con la misma conexión, otros usuarios que estén a la vez no interferirá...
  #5 (permalink)  
Antiguo 08/05/2015, 10:14
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Guardar id de un registro antes que otro usuario lo genere

Hola gnzsoloyo,

A mi no me fallaba, sólo que leí tu post y no lo entendía. Yo siempre ejecuto mysql_insert_id() tras el insert y compruebo que esté ok, funciona bien. Entendí otra cosa, si había otros usuarios a la vez en otros navegadores... pero mysql_insert_id() es el último registro sql insertado en la conexión abierta de un usuario específico, por lo que si hay otros NO afecta... ¿verdad?
  #6 (permalink)  
Antiguo 08/05/2015, 10:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Guardar id de un registro antes que otro usuario lo genere

Afecta la concurrencia. Pueden generase problemas, como se explica claramente en el manual de referencia.

Por otro lado, en realidad mi última respuesta estaba en el hilo equivocado. Lo siento.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 08/05/2015, 10:42
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Guardar id de un registro antes que otro usuario lo genere

Hola,

Ya pero no entendí los enlaces de referencia. ¿me puedes indicar algún ejemplo?

¿Con tablas MyIsam sucede también?

¿Cuál es la mejor forma de usar autoincrement con concurrencia de varios usuarios a la vez?


Muchas gracias y disculpa las molestias
  #8 (permalink)  
Antiguo 08/05/2015, 10:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Guardar id de un registro antes que otro usuario lo genere

Es un tema para el foro de MySQL, no este.

Postea tu pregunta en el foro de BBDD o el de MySQL y seguiremos. Aquí se está volviendo OFF TOPIC.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: mysql, registro, tabla, usuario, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:50.