Bases des bases de données

La quantité en stock d'un produit dans une table Stock vaut 10. La transaction T1 lit la quantité en stock et réécrit cette valeur moins 3, et T2 lit la quantité en stock et réécrit cette valeur moins 5. Si elles s'exécutent sans poser de verrou, dans l'ordre lecture de T1, lecture de T2, écriture de T1, écriture de T2, quelle est la quantité en stock finale ?

  1. A2
  2. B5
  3. C7
Afficher la réponse et l'explication

Réponse : B. 5

T1 et T2 lisent toutes deux la quantité en stock de 10 avant que l'autre n'ait écrit. T1 écrit 10 − 3 = 7, mais T2 l'écrase ensuite avec 10 − 5 = 5, calculé à partir du 10 qu'elle a lu ; la quantité finale est donc 5. Elle aurait dû être 10 − 3 − 5 = 2, le résultat de l'exécution des 2 opérations l'une après l'autre ; la mise à jour de T1 a été perdue. C'est ce qu'on appelle une mise à jour perdue (lost update). Pour l'éviter, on peut soit poser un verrou exclusif lors de la lecture afin que la lecture de T2 attende la fin de T1 (par exemple avec SELECT … FOR UPDATE), soit effectuer la lecture et l'écriture dans une seule instruction SQL, comme UPDATE Stock SET Quantite = Quantite - 3.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases des bases de données

  1. Parmi les problèmes qui surviennent lorsque des transactions s'exécutent simultanément, quelle description d'une lecture sale (dirty read) est correcte ?
  2. La transaction T1 a exécuté SELECT COUNT(*) FROM Commande WHERE Montant >= 1000 et a obtenu 8. Juste après, T2 a inséré une ligne de commande d'un montant de 2000 et l'a validée. Lorsque T1 a exécuté de nouveau la même instruction SELECT, elle a obtenu 9. De quel phénomène s'agit-il ?
  3. Parmi les niveaux d'isolation définis par la norme SQL, quelle combinaison indique correctement les phénomènes qui peuvent se produire avec READ COMMITTED ?
  4. La transaction T1 détient un verrou partagé sur une ligne et la lit. Sur la même ligne, T2 demande un verrou partagé et T3 un verrou exclusif. Quelle affirmation est correcte pour la période qui précède la libération du verrou par T1 ?
  5. Quelle proposition décrit correctement le verrouillage à deux phases (2PL), utilisé pour le contrôle de concurrence des transactions ?