Tak - do pewnego stopnia.
Jak długo SELECT
utrzymuje wspólną blokadę zależy od poziomu izolacji transakcji:
READ UNCOMMITTED
- w ogóle nie nabyto wspólnej blokady -UPDATE
nie jest zablokowanyREAD COMMITTED
- blokada współdzielona jest pobierana tylko na czas odczytu danych -UPDATE
może zostać zablokowany na bardzo krótki czasREPEATABLE READ
iSERIALIZABLE
- blokada współdzielona zostaje nabyta i utrzymywana do końca transakcji -UPDATE
jest zablokowany do momentuSELECT
transakcja się kończy
Technicznie rzecz biorąc, UPDATE
instrukcja najpierw otrzymuje UPDATE
lock - który jest kompatybilny z blokadą współdzieloną (używaną przez SELECT
) - przez czas, w którym odczytuje bieżące wartości aktualizowanych wierszy.
Gdy to zrobisz, Update
blokada jest eskalowana do wyłącznej blokady dla nowych danych, które mają zostać zapisane w tabeli.