Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server - sperrt [SELECT] [UPDATE]?

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 - UPDATE ist nicht gesperrt
  • READ COMMITTED - Shared Lock wird nur für die Dauer des Lesens der Daten erworben - UPDATE kann für einen sehr kurzen Zeitraum gesperrt werden
  • REPEATABLE READ und SERIALIZABLE - Shared Lock wird erworben und bis zum Ende der Transaktion gehalten - UPDATE ist bis zum SELECT gesperrt 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.