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

Er det muligt at tvinge rækkeniveaulåsning i SQL Server?

Du kan bruge ROWLOCK-tip, men AFAIK SQL kan beslutte at eskalere det, hvis det løber tør for ressourcer

Fra doco:

ROWLOCK Specificerer, at rækkelåse tages, når side- eller tabellåse normalt tages. Når specificerede intransaktioner fungerer på SNAPSHOT-isolationsniveauet, tages rækkelåse ikke, medmindre ROWLOCK kombineres med andre tabeltip, der kræver låse, såsom UPDLOCK og HOLDLOCK.

og

Låsetips ROWLOCK, UPDLOCK OG XLOCK, der erhverver låse på rækkeniveau, kan placere låse på indeksnøgler i stedet for de faktiske datarækker. Hvis f.eks. atable har et ikke-klynget indeks, og en SELECT-sætning, der bruger et låsetip, håndteres af et dækkende indeks, erhverves en lås på indeksnøglen i det dækkende indeks i stedet for på datarækken i basistabellen.

Og endelig giver dette en ret dybdegående forklaring om låseeskalering i SQL Server 2005, som blev ændret i SQL Server 2008.

Der er også den meget dybdegående:Locking in The Database Engine (i bøger online)

Så generelt

UPDATE
Employees WITH (ROWLOCK)
SET Name='Mr Bean'
WHERE Age>93

Det burde være ok, men afhængigt af indekserne og belastningen på serveren kan det ende med at eskalere til en sidelås.



  1. Sådan implementeres MySQL på Ubuntu og fuldt administreret

  2. Stop med at få SQL Server til at udføre dit beskidte arbejde

  3. Sådan installeres den seneste MySQL 8 på Debian 10

  4. Hvordan kan jeg udstede en enkelt kommando fra kommandolinjen gennem sql plus?