Cita:
Iniciado por ocp001a
[...] ¿É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,