Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con concurrencia de consultas - Mysql

Estas en el tema de Problema con concurrencia de consultas - Mysql en el foro de Mysql en Foros del Web. Saludos amigos. Tengo una tabla en donde registro ventas, en dicha tabla debo registrar entre otros datos el numero correlativo de la venta en el ...
  #1 (permalink)  
Antiguo 10/11/2010, 23:27
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta Problema con concurrencia de consultas - Mysql

Saludos amigos.

Tengo una tabla en donde registro ventas, en dicha tabla debo registrar entre otros datos el numero correlativo de la venta en el día.

Tengo una tabla auxiliar o temporal en donde registro el numero correlativo actual. Cuando se va a insertar una nueva venta consulto esta tabla y obtengo el numero correlativo actual, hago la insercion y despues incremento en 1 el valor del numero correlativo de la tabla auxiliar mediante un UPDATE.

//consulta de numero correlativo
$sql="select numero from tablatemporal where fecha='$fecha'";
$rs=mysql_query($sql);
$reg=mysql_fetch_array($rs);

//insercion de venta
$sql2="insert into venta values ('$_POST[idventa]','$_POST[idcliente]','$fecha','$reg[numero]')";
$rs=consulta($sql2);

$numeroped=$reg[numero]+1;
//actualizando tabla temporal
$sqlupdnt="update tablatemporal set numero='$numeroped' where fecha='$fecha'";
$rsupdnt=mysql_query($sqlupdnt);

El problema es el siguiente: hay muchos terminales registrando ventas en paralelo y han habido ocasiones en que dos ventas (consecutivas) se han registrado con el mismo numero correlativo, y esto se da debido a que casi en simultaneo se ordena el registro de 2 o mas ventas realizando cada una de ellas las consultas mostradas anteriormente.
Existe alguna forma de evitar que, para este caso, ante una concurrencia simultanea de consultas se registren 2 ventas con el mismo numero correlativo ????. (Talvez triggers, lock table, etc).

Gracias de antemano.
  #2 (permalink)  
Antiguo 11/11/2010, 02:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con concurrencia de consultas - Mysql

La forma correcta es encerrar las consultas en una transacion siempre que trabajes con tablas InnoDB o BDB, pero yo veo una solución más sencilla si el campo fecha tiene formato fecha (Date) yo lo pasaria a DATETIME haria los cambios necesarios para que se guarde fecha y hora (H:m:s) y registraria las ventas sin preocuparme de buscar el numero correlativo, si tienes el momento exácto en que se han producido siempre las puedes ordenar... Dos ventas producidas en el mismo segundo tampoco tendrias forma de decidir cual es la primera...

La funcion NOW() te pondra la fecha y hora en el momento que se preoduce el INSERT.

Quim

Última edición por quimfv; 11/11/2010 a las 02:29
  #3 (permalink)  
Antiguo 11/11/2010, 07:49
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Problema con concurrencia de consultas - Mysql

Gracias Quim por tu respuesta.

Un saludo

Etiquetas: Ninguno
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 14:56.