Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/08/2011, 15:06
Avatar de Uncontroled_Duck
Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años
Puntos: 261
Respuesta: Bloqueo de tabla, transacciones o ambas?

Cita:
Iniciado por ocp001a Ver Mensaje
[...] ¿Ésta forma es efectiva? ¿O es posible (como me figuro) que antes de hacer el update otro usuario lo haga?

O bien si definitivamente necesito bloquear completamente la tabla para realizar la operación.
De por si, InnoDB se encarga de bloquear el registro (no la tabla) que se está ejecutando en una session concreta.

Por lo que, sea transacción o no, hasta que no termina la transacción/operación no aparecerá reflejada para otro usuario. Pero otro usuario con su session si puede hacer operaciones simultáneamente en la misma tabla.

Ahora bien, como comentas, los ejemplos que hay, son de A a B, y si existe un error, no se completa la transacción. Pero esque esa es la base de esta operación. Todo lo que se quiera añadir son casos particulares.

El ejemplo básico es así:
Código PHP:
mysql_query("START TRANSACTION");
mysql_query("UPDATE cuentas SET money = money-100 WHERE id = '1'");
mysql_query("UPDATE cuentas SET money = money+100 WHERE id = '2'");

if( 
mysql_error() )
{
    
mysql_query("ROLLBACK");
}
else
{
    
mysql_query("COMMIT");

Por curiosidad he probado con operaciones entre el START y el COMMIT y se comporta perfectamente.

Ya sería adaptarlo a tu caso.

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight