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 -UPDATEn'est pas bloquéREAD COMMITTED- le verrou partagé est acquis uniquement pendant la durée de lecture des données -UPDATEpeut être bloqué pendant une très courte périodeREPEATABLE READetSERIALIZABLE- le verrou partagé est acquis et conservé jusqu'à la fin de la transaction -UPDATEest bloqué jusqu'à ce que leSELECTla 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.