Ver Mensaje Individual
  #6 (permalink)  
Antiguo 06/07/2011, 10:46
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Bloquear base de datos

Cita:
que sucede cuando un usuario intenta acceder a una tabla bloqueada? espera su turno o da error?
Cita:
He encontrado cosas interesante pero nada que conteste mi pregunta :S
Entonces no has mirado los ejemplos con detalle. Mira este segmento del User B en 10.5 Ejemplos de Transacciones y Concurrencia (mismo link que te puse):
Código MySQL:
Ver original
  1. mysql> set autocommit=0;
  2.                Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> update bank set debit=666 where id=32;
  5. .
  6. .
  7. .
  8. .
  9. .
  10. .            
  11. .Wait unlock

A su vez, cuando la transacción del User B empieza, y el otro pretende hacer lo mismo, puede suceder esto:
Código MySQL:
Ver original
  1. mysql> update bank set debit=888 where id=32;
  2. ERROR 1213 (40001): Deadlock found when trying to get lock;
  3. Try restarting transaction
  4.  
  5.  
  6.  
  7. >T1 tiene bloqueado a T2, T2 espera la liberacion
  8. >al hacer el update en T1 ahora T1 espera a T2
  9. >por lo tanto se produce un deadlock
  10. >el dbms hace rollback en T1 (ultimo en espera) y procesa T2
¿Queda claro?
Cuando hay una transacción en curso, el otro usuario espera hasta que o bien la tabla se libera, se produce una incompatibilidad de esperas, o se le acaba el timeout asignado por default...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)