Bonjour,
Avec les collègues nous avons constaté quelque chose d'étonnant.
Dans une transaction en mode Read Commited (par défaut sous SQL Server), nous avons fait ce test :
Dans un processus (une "nouvelle requête") sous Sql Server Management, nous avons mis un verrou sur une ligne comme ceci :
La ligne de t_exemple dont l'id est 1234 est verrouillé pendant 20 secondes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SET TRANSACTION ISOLATION LEVEL READ COMMITED BEGIN TRANSACTION update t_exemple where id=1234; WAITFOR DELAY '00:00:20' COMMIT TRANSACTION
Dans ce laps de temps, nous avons verifié que la ligne était bien verrouillé, avec une nouvelle requête dans Sql Server Management (2eme processus sur Sql Server) avec cette procédure :
Effectivement, la ligne était bien verrouillé car elle ne nous a été rendu qu'après la fin de la première requête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from t_exemple where id=1234;
Ensuite on a fait la même chose mais nous avons remplacé la deuxième requête par :
Sans préciser que nous voulions l'id 1234.
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from t_exemple
Eh bien, le résultat comprenant l'id 1234 nous a été retourné avant la fin de la première requête.. Il semble donc qu'il n'y avait pas de verrou sur la ligne dont l'id est 1234.
Auriez vous une explication à cela ?
D'avance merci beaucoup
Partager