Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server — czy [SELECT] blokuje [UPDATE]?

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 zablokowany
  • READ COMMITTED - blokada współdzielona jest pobierana tylko na czas odczytu danych - UPDATE może zostać zablokowany na bardzo krótki czas
  • REPEATABLE READ i SERIALIZABLE - blokada współdzielona zostaje nabyta i utrzymywana do końca transakcji - UPDATE jest zablokowany do momentu SELECT 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008 :zaktualizuj tabelę kluczem podstawowym

  2. Jeśli rekord istnieje, zaktualizuj inną wstawkę

  3. SQL Server:klauzula GROUP BY, aby uzyskać wartości oddzielone przecinkami

  4. SQL Server bcp Utility i numeryczny typ danych

  5. formuła dla kolumny wyliczanej na podstawie innej kolumny tabeli