sql >> Databasteknik >  >> RDS >> Sqlserver

Är det möjligt att tvinga radnivålåsning i SQL Server?

Du kan använda ROWLOCK-tipset, men AFAIK SQL kan besluta att eskalera det om det tar ont om resurser

Från dokumentet:

ROWLOCK Anger att radlås tas när sid- eller tabelllås vanligtvis tas. När specificerade intransaktioner fungerar på SNAPSHOT-isoleringsnivå, tas inte radlås om inte ROWLOCK kombineras med andra tabelltips som kräver lås, såsom UPDLOCK och HOLDLOCK.

och

Låstips ROWLOCK, UPDLOCK OCH XLOCK som skaffar lås på radnivå kan placera lås på indexnycklar snarare än de faktiska dataraderna. Till exempel, om atable har ett icke-klustrat index och en SELECT-sats som använder ett låstips hanteras av ett täckande index, förvärvas ett lås på indexnyckeln i det täckande indexet snarare än på dataraden i bastabellen.

Och slutligen ger detta en ganska djupgående förklaring om låseskalering i SQL Server 2005 som ändrades i SQL Server 2008.

Det finns också, mycket djupgående:låsning av databasmotorn (i böcker online)

Så i allmänhet

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

Borde vara ok, men beroende på index och belastning på servern kan det sluta eskalera till ett sidlås.



  1. Rekonstruera Standby DB

  2. MariaDB LTRIM() vs LTRIM_ORACLE():Vad är skillnaden?

  3. ASP.NET använder SqlConnection connect MySQL

  4. Exempelscheman på GitHub