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ériodeREPEATABLE READ
etSERIALIZABLE
- le verrou partagé est acquis et conservé jusqu'à la fin de la transaction -UPDATE
est bloqué jusqu'à ce que leSELECT
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.