Exercice
Soit l'exécution concurrente des deux transactions ci-dessous (on pose qu'aucune autre transaction ne s'exécute par ailleurs).
NB : Le tableau fait état des temps auxquels les instructions sont soumises au serveur et non auxquels elles sont traitées.
De combien le champ TABLE1.A a-t-il été augmenté à t6 du point de vue de la transaction 2 ?
NB : Si vous pensez que le résultat ne peut être déterminé à cause d'une perte de mise à jour ou d'un inter-blocage, répondez 0.
La transaction 1 obtient un verrou X à t2 et exécute donc sans problème ses deux UPDATE.
La transaction 2 est mise en attente avant son UPDATE à t3, car elle ne peut obtenir de verrou X déjà posé par la transaction 1. Mais dès que la transaction 1 exécute son COMMIT à t5, la transaction 1 obtient de poser un verrou X (libéré par la transaction 1) et peut donc exécuter son UPDATE. A t6 la transaction 2 voit donc que A a été augmenté de 3, puisque les trois transactions UPDATE ont été exécutées.
Notons néanmoins que la transaction 2 n'a pas encore fait de COMMIT, et donc que potentiellement un ajout de 1 sur A pourrait être annulé plus tard par un ROLLBACK de la transaction 2. Donc une augmentation de 2 est définitivement acquise et une augmentation de 1 supplémentaire est acquise pour le moment, mais pourra être remise en cause.