Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/11/2010, 23:27
carloscapu
 
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.