Ja - bis zu einem gewissen Grad.
Wie lange ein SELECT hält eine gemeinsame Sperre, hängt von der Isolationsstufe der Transaktion ab:
READ UNCOMMITTED- es wird überhaupt keine gemeinsame Sperre erworben -UPDATEist nicht gesperrtREAD COMMITTED- Shared Lock wird nur für die Dauer des Lesens der Daten erworben -UPDATEkann für einen sehr kurzen Zeitraum gesperrt werdenREPEATABLE READundSERIALIZABLE- Shared Lock wird erworben und bis zum Ende der Transaktion gehalten -UPDATEist bis zumSELECTgesperrt Transaktion endet
Technisch gesehen ist das UPDATE -Anweisung erhält zuerst ein UPDATE Sperre - die mit einer gemeinsamen Sperre kompatibel ist (wie sie von SELECT verwendet wird ) - für die Dauer des Lesens der aktuellen Werte der zu aktualisierenden Zeilen.
Sobald das erledigt ist, das Update Die Sperre wird zu einer exklusiven Sperre eskaliert, damit die neuen Daten in die Tabelle geschrieben werden.