Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:[SELECT] blocca [UPDATE]?

Sì, fino a un certo punto.

Quanto dura un SELECT mantiene un blocco condiviso dipende dal livello di isolamento della transazione:

  • READ UNCOMMITTED - non viene acquisito alcun blocco condiviso - UPDATE non è bloccato
  • READ COMMITTED - il blocco condiviso viene acquisito solo per la durata della lettura dei dati - UPDATE potrebbe essere bloccato per un periodo di tempo molto breve
  • REPEATABLE READ e SERIALIZABLE - il blocco condiviso viene acquisito e mantenuto fino al termine della transazione - UPDATE è bloccato fino a quando il SELECT transazione termina

Tecnicamente, il UPDATE prima ottiene un UPDATE lock - che è compatibile con un lock condiviso (come usato da SELECT ) - per tutta la durata della lettura dei valori correnti delle righe da aggiornare.

Una volta fatto, il Update lock viene elevato a un blocco esclusivo per i nuovi dati da scrivere nella tabella.