31/08/2011, 15:45
|
Colaborador | | Fecha de Ingreso: mayo-2008 Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses Puntos: 528 | |
Respuesta: Bloqueo de tabla, transacciones o ambas? Gracias por responder.
El hecho de que si se ejecutan todas las sentencias correctamente se aplique el COMMIT me queda claro, pero como en el primer caso que planteo hago la operación en dos sentencias separadas, me queda la inquietud de si puede pasar este caso de concurrencia:
0.001 ms: Usuario A necesita $100, consulta si hay disponibilidad, y sí, hay $150 disponibles.
0.002 ms: Usuario B necesita $80, consulta si hay disponibilidad, y sí, (todavía hay $150 disponibles).
0.003 ms: Usuario A actualiza y resta sus $100, ahora quedan $50 disponibles
0.004 ms: Usuario B acaba de consultar que quedan $150, así que actualiza y resta $80, pero como sólo quedaron $50, resulta en un -30 (y por tanto un fallo).
En el caso de una transferencia de A a B no hay ejemplo de concurrencia, sólo ejemplo de que si la conexión cayera o hubiera un fallo la operación se cancela, pero siempre pensando en una sola sesión.
Ahora bien, si la transacción junta ambas sentencias y las ejecuta prácticamente al mismo tiempo bloqueando la tabla para cada operación, estaría perfecto, pero he leído que las transacciones bloquean en diferentes modos las tablas, según sea consulta, actualización, borrado etc. y me queda el temor de que dos o más usuarios consultando al mismo tiempo el mismo saldo obtengan lecturas engañosas.
Perdón si mis preguntas resultan impertinentes, es sólo que este proyecto va a administrar grandes sumas de dinero y quiero estar completamente seguro de qué métodos debo emplear. |