Code : SQL
START TRANSACTION;
INSERT INTO Adoption (client_id, animal_id, date_reservation, prix)
VALUES (12, 75, NOW(), 10.00);
Session 2 :
Code : SQL
SELECT * FROM Adoption
WHERE client_id > 13
LOCK IN SHARE MODE;
SELECT * FROM Adoption
WHERE client_id < 13
LOCK IN SHARE MODE;
La première session insère une adoption pour le client 12 et pose un verrou exclusif sur cette ligne.
La seconde session fait deux requêtes SELECT en posant un verrou partagé : l'une qui sélectionne les adoptions des clients
avec un id supérieur à 13 ; l'autre qui sélectionne les adoptions des clients avec un id inférieur à 13.
Seule la seconde requête SELECT se heurte au verrou posé par la première session, puisqu'elle tente de récupérer notamment les
adoptions du client 12, dont une est verrouillée.
Dès que la session 1 commite l'insertion, la sélection se fait dans la session 2.
Session 1 :
Code : SQL
COMMIT;
Verrou posé par une requête de sélection
Voyons d'abord le comportement d'un verrou partagé, posé par SELECT ... LOCK IN SHARE MODE.
Session 1 :
Code : SQL
START TRANSACTION;
SELECT * FROM Client
WHERE id < 5
LOCK IN SHARE MODE;
Session 2 :
Code : SQL
START TRANSACTION;
SELECT * FROM Client
WHERE id BETWEEN 3 AND 8;
SELECT * FROM Client
WHERE id BETWEEN 3 AND 8
LOCK IN SHARE MODE;
Partie 5 : Sécuriser et automatiser ses actions
245/414
www.openclassrooms.com
START TRANSACTION;
INSERT INTO Adoption (client_id, animal_id, date_reservation, prix)
VALUES (12, 75, NOW(), 10.00);
Session 2 :
Code : SQL
SELECT * FROM Adoption
WHERE client_id > 13
LOCK IN SHARE MODE;
SELECT * FROM Adoption
WHERE client_id < 13
LOCK IN SHARE MODE;
La première session insère une adoption pour le client 12 et pose un verrou exclusif sur cette ligne.
La seconde session fait deux requêtes SELECT en posant un verrou partagé : l'une qui sélectionne les adoptions des clients
avec un id supérieur à 13 ; l'autre qui sélectionne les adoptions des clients avec un id inférieur à 13.
Seule la seconde requête SELECT se heurte au verrou posé par la première session, puisqu'elle tente de récupérer notamment les
adoptions du client 12, dont une est verrouillée.
Dès que la session 1 commite l'insertion, la sélection se fait dans la session 2.
Session 1 :
Code : SQL
COMMIT;
Verrou posé par une requête de sélection
Voyons d'abord le comportement d'un verrou partagé, posé par SELECT ... LOCK IN SHARE MODE.
Session 1 :
Code : SQL
START TRANSACTION;
SELECT * FROM Client
WHERE id < 5
LOCK IN SHARE MODE;
Session 2 :
Code : SQL
START TRANSACTION;
SELECT * FROM Client
WHERE id BETWEEN 3 AND 8;
SELECT * FROM Client
WHERE id BETWEEN 3 AND 8
LOCK IN SHARE MODE;
Partie 5 : Sécuriser et automatiser ses actions
245/414
www.openclassrooms.com
