Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server - [SELECT] verrouille-t-il [UPDATE] ?

Oui - dans une certaine mesure.

Combien de temps un SELECT détient un verrou partagé dépend du niveau d'isolement de la transaction :

  • READ UNCOMMITTED - aucun verrou partagé n'est acquis du tout - UPDATE n'est pas bloqué
  • READ COMMITTED - le verrou partagé est acquis uniquement pendant la durée de lecture des données - UPDATE peut être bloqué pendant une très courte période
  • REPEATABLE READ et SERIALIZABLE - le verrou partagé est acquis et conservé jusqu'à la fin de la transaction - UPDATE est bloqué jusqu'à ce que le SELECT la transaction se termine

Techniquement, la UPDATE l'instruction obtient d'abord un UPDATE verrou - qui est compatible avec un verrou partagé (tel qu'utilisé par le SELECT ) - pendant la durée pendant laquelle il lit les valeurs actuelles des lignes à mettre à jour.

Une fois cela fait, la Update le verrou est transformé en verrou exclusif pour que les nouvelles données soient écrites dans la table.