La gestion de verrous :
Deuxième grand apport de la
technologie InnoDB, la gestion de verrou.
Nous expliquerons ici en quoi consiste exactement cette gestion de
verrous, et en quoi cela accroît la vitesse d'exécution des requêtes
soumises à une base MySQL dans le cas d'accès concurrentiels.
Soit une table d'une base MySQL
contenant une valeur entière : 10
C1 C2
C3 |
..
.. ..
.. .. 10
.. .. ..
|
Imaginons qu'un utilisateur A
décide de modifier ce champs, et qu'un autre utilisateur B, demande
l'affichage de cette valeur en même temps (éventuellement pour
modification).
L'utilisateur A débute alors
une transaction et pose un verrou d'écriture sur cette valeur.
Ainsi personne ne pourra modifier cette valeur tant que l'utilisateur n'a
pas valider ou annuler sa transaction.
L'utilisateur modifie alors ce champs et fait passer la valeur a 12
pendant sa transaction.
S'il demande l'affichage de cette valeur, la modification est visible pour
lui, MySQL lui répondra :"12".
Cependant, au même moment,
l'utilisateur B demande l'affichage de la même valeur, MySQL lui
donne la précédente valeur :"10", car l'utilisateur A n'a pas
encore validé sa transaction.
De plus si l'utilisateur B cherche à modifier cette valeur, il
reçoit un message d'erreur car l'utilisateur A a poser un verrou
d'écriture pendant sa transaction.
L'utilisateur A valide sa
transaction par l'ordre SQL COMMIT : sa modification est désormais
visible par tout les utilisateurs.
Ces derniers peuvent maintenant poser à leurs tours un verrou sur cette
donnée.
Cet utilisateur peut aussi annuler sa transaction à l'aide de l'ordre SQL
ROLLBACK.