Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 19946|Svar: 3

[Källa] Databaslås NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Kopiera länk]
Publicerad på 2021-01-14 15:23:14 | | | |
NOLOCK
När detta alternativ är valt läser eller ändrar SQL Server data utan några lås. I detta fall kan användaren läsa data från en obunden transaktion eller Roll Back, känd som "smutsig data".

HOLDLOCK
När detta alternativ är valt behåller SQL Server detta delade lås tills hela transaktionen är slut utan att släppa det på vägen.

UPDLOCK
När detta alternativ är valt använder SQL Server ett modifieringslås istället för ett delat lås när data läses och behåller detta lås tills hela transaktionen eller kommandot är slut. Detta alternativ säkerställer att flera processer kan läsa data samtidigt, men endast den processen kan ändra datan.

TABLOCK
När detta alternativ är valt placerar SQL Server ett delat lås på hela tabellen tills kommandot avslutas. Detta alternativ säkerställer att andra processer endast kan läsa och inte ändra data.

PAGLOCK
Detta alternativ är standardvalet, och när det är valt använder SQL Server ett delat sidlås.

TABLOCKX (Exklusivt bordslås)
När detta alternativ är valt kommer SQL Server att låsa hela tabellen tills kommandot eller transaktionen avslutas. Detta förhindrar att andra processer läser eller ändrar datan i tabellen.

HOLDLOCK håller det delade låset tills hela transaktionen är slutförd och bör släppas så snart det låsta objektet inte längre behövs, motsvarande nivån för SERIALIZABLE transaktionsisolering

NOLOCK-satsen exekveras utan att utfärda ett delat lås, vilket tillåter dirty reads, vilket motsvarar nivån för READ UNCOMMITTED transaktionsisolering

PAGLOCK använder flera sidlås där ett tabelllås används

READPAST låter SQL-servern hoppa över låsta rader och utföra transaktioner, och för READ UNCOMMITTED transaktionsisoleringsnivåer hoppar man bara över RID-lås, inte sid-, zon- och tabelllås

ROWLOCK upprätthåller användningen av rowlocks

TABLOCKX upprätthåller användningen av ett exklusivt tabellnivålås, vilket förhindrar att andra transaktioner använder tabellen under transaktionen

UPLOCK tvingar användning av uppdateringar när man läser en tabell utan delat lås

Obs: Skillnaden mellan att låsa en tabell i en databas
VÄLJ * FRÅN tabell MED (HOLDLOCK) Andra transaktioner kan läsa tabellen, men kan inte uppdatera eller ta bort
VÄLJ * FRÅN tabell MED (TABLOCKX) Andra transaktioner kan inte läsa, uppdatera och ta bort tabeller




Föregående:Win10 Remote Desktop Dual-Screen-skärm
Nästa:.NET/C# Skapa ETH-plånbokskonto och verifieringslösenord baserat på Nethereum [med källkod]
 Hyresvärd| Publicerad på 2021-01-14 16:53:24 |
Testa TABLOCKX-låset

Test-SQL:en är följande:


Testning av C#-koden:


Upptäckt,Hela tabellen är låst, och datan kan endast frågas när transaktionen genomförs, som visas i figuren nedan:



Ta bort WITH(TABLOCKX) och uppdatera endast data med ID 1, testet är följande:



Eftersom Uppgift 2 och Uppgift 4 inte involverar data med id 1 är frågan mycket snabb, och 3 och 4 måste vänta på att transaktionen ska slutföras innan de kan skicka en förfrågan.

Beteende vid dataändring

I en committed read-transaktion som använder radversionering, välj raderna som ska uppdateras med en blockeringsskanning, där ett uppdateringslås (U-lås) tillämpas på dataraden när datavärdet läses. Detta är samma sak som en committed read-transaktion som inte använder radversionering. Om en datarad inte uppfyller uppdateringskriterierna släpps ett uppdateringslås på den raden och nästa rad låses och skannas.

Uppdateringslås (U): Ett låsläge som förhindrar deadlocks, där två transaktioner läser en dataresurs först. Vid modifiering orsakar användning av delade lås och exklusiva lås ibland deadlocks, medan användning av uppdateringslås kan förhindra deadlocks. Resursens uppdateringslås kan endast tilldelas en transaktion åt gången, och om resursen behöver ändras blir uppdateringslåset ett exklusivt lås, annars blir det ett delat lås.

Inloggningen med hyperlänken är synlig.

 Hyresvärd| Publicerad på 2021-01-28 17:30:51 |
Utfärda:

udpate a
Sätt kolumn1 = 1
där idx = 1
När sqlserver kör update-satsen låser den hela tabellen

Analys:

Klockstruktur,Utan en primärnyckel kan du inte bara låsa raderna
 Hyresvärd| Publicerad på 2023-05-02 11:47:24 |
Entity Framework Frågeoptimering WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com