sql >> Database >  >> RDS >> Sqlserver

SQL Server - vergrendelt [SELECT] [UPDATE]?

Ja - tot op zekere hoogte.

Hoe lang een SELECT vasthouden aan een gedeeld slot is afhankelijk van het isolatieniveau van de transactie:

  • READ UNCOMMITTED - er wordt helemaal geen gedeeld slot verkregen - UPDATE is niet geblokkeerd
  • READ COMMITTED - gedeelde vergrendeling wordt alleen verkregen voor de duur van het lezen van de gegevens - UPDATE kan voor een zeer korte periode worden geblokkeerd
  • REPEATABLE READ en SERIALIZABLE - gedeelde vergrendeling wordt verkregen en vastgehouden tot het einde van de transactie - UPDATE wordt geblokkeerd totdat de SELECT transactie eindigt

Technisch gezien is de UPDATE statement krijgt eerst een UPDATE slot - dat compatibel is met een gedeeld slot (zoals gebruikt door de SELECT ) - voor de duur van de tijd terwijl het de huidige waarden leest van de rijen die moeten worden bijgewerkt.

Zodra dat is gebeurd, wordt de Update lock wordt geëscaleerd naar een exclusieve lock voor de nieuwe gegevens die naar de tabel moeten worden geschreven.



  1. Waar zijn de verschillen bij het gebruik van XML en MySQL-database? Welke moet ik gebruiken?

  2. Splits meerdere SQL-instructies in afzonderlijke SQL-instructies

  3. PostgreSQL-updates met meerdere rijen in Node.js

  4. SQLite JSON_GROUP_ARRAY()