Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/05/2009, 12:58
zagduami
 
Fecha de Ingreso: agosto-2006
Mensajes: 61
Antigüedad: 17 años, 8 meses
Puntos: 0
Uso del Select for update

Hola a todos!

Estoy haciendo un sistema y requiero que al seleccionar un registro en la BD asegurarme de que otro select no lo va a tomar y realizar operaciones con el.

Investigue y encontre el Select for Update que evita que esto pase, con el siguiente ejemplo:

SELECT counter_field FROM child_codes FOR UPDATE;
UPDATE child_codes SET counter_field = counter_field + 1;

Yo lo implemente de la siguiente manera:

$result = mysql_query("SELECT * FROM $dbase WHERE ocupado='0' AND bloqueado='0' ORDER BY `time_ses` ASC LIMIT 1 FOR UPDATE");

Hago un par de operaciones:

if(! $result) return(array('errCode'=>"-1",'errDesc'=>"Error interno del sistema."));
$row = mysql_fetch_array($result);
$pid=$row['id'];

y después hago el update:

$result = mysql_query("UPDATE $dbase SET time_ses='$tc', ocupado='1' WHERE id='$pid' "); if(! $result) return(array('errCode'=>"-1",'errDesc'=>"Error interno del sistema."));

Mi duda es:
La manera en que lo realizo es correcta o tengo que implementar un esquema como el del ejemplo, es decir el select e inmediatamente el update?

¿Cómo puedo asegurarme que efectivamente mysql esta bloqueando el registro para evitar que alguien más lo seleccione?

Muchas Gracias de antemano por su tiempo.

Saludos