Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Isolation: Repeatable Read och Serializable-nivåer | Acid
SQL-optimering och Frågefunktioner

Isolation: Repeatable Read och Serializable-nivåer

Svep för att visa menyn

Repeatable Read

Isoleringsnivån Repeatable Read i databaser säkerställer att när du startar en transaktion ser du en ögonblicksbild av databasen som förblir oförändrad under hela din uppgift.
Detta innebär att även om andra ändringar sker i databasen medan du arbetar, kommer du endast att se data som de var när du började.
Transaktioner under Repeatable Read-isolering håller läslås på alla rader de refererar till och skrivlås på rader de infogar, uppdaterar eller tar bort. Detta förhindrar förlorade uppdateringar, smutsiga och icke-repetitiva läsningar.
Det finns dock ett problem som fortfarande kan uppstå med denna typ av isolering – fantomläsning.

Fantomläsning

Note
Läs mer

Fantomläsningar uppstår när en transaktion kör om en fråga och hittar olika uppsättningar av rader som uppfyller det ursprungliga frågevillkoret.

Till exempel, anta att en transaktion frågar efter alla ordrar med ett totalbelopp över $1000. Om en annan transaktion infogar en ny order med ett totalbelopp som uppfyller detta villkor mellan den första och andra körningen av frågan, kommer den första transaktionen att observera denna extra rad vid den andra körningen, vilket resulterar i en fantomläsning.

Fantomläsning kan uppstå när en transaktion läser data och en annan transaktion lägger till nya poster i databasen. Som ett resultat kan vi få olika resultatmängder för två på varandra följande lästransaktioner.

phantom_read

Icke-repeterbar läsning vs fantomläsning

Icke-repeterbar läsning uppstår när samma fråga som körs av Användare A returnerar olika värden för samma rad mellan på varandra följande läsningar, vanligtvis på grund av ändringar av Användare B.

Fantomläsning, å andra sidan, inträffar när samma fråga som körs av Användare A returnerar olika uppsättningar av rader mellan på varandra följande läsningar, även om enskilda rader själva inte har uppdaterats.

Vi kan ange denna isoleringsnivå i vår SQL-fråga med följande kommando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable

Isoleringsnivån Serializable är den högsta nivån av isolering i databaser och säkerställer den mest strikta formen av samtidighetskontroll.
På denna nivå utförs transaktioner som om de behandlades seriellt, en efter en, även om de faktiskt kan köras parallellt. Detta säkerställer att resultatet av transaktionerna är detsamma som om de utfördes i någon seriell ordning, vilket bibehåller konsistens och förhindrar alla kända samtidighetsavvikelser.

Notera

Användning av denna typ av isolering kan leda till minskad prestanda på grund av ökad låsning.

Vi kan använda följande sats för att ställa in denna isoleringsnivå i vår SQL-fråga:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

Matcha isoleringsnivåerna med deras beskrivningar.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Klicka eller dra`n`släpp objekt och fyll i luckorna

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 7

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Isolation: Repeatable Read och Serializable-nivåer

Repeatable Read

Isoleringsnivån Repeatable Read i databaser säkerställer att när du startar en transaktion ser du en ögonblicksbild av databasen som förblir oförändrad under hela din uppgift.
Detta innebär att även om andra ändringar sker i databasen medan du arbetar, kommer du endast att se data som de var när du började.
Transaktioner under Repeatable Read-isolering håller läslås på alla rader de refererar till och skrivlås på rader de infogar, uppdaterar eller tar bort. Detta förhindrar förlorade uppdateringar, smutsiga och icke-repetitiva läsningar.
Det finns dock ett problem som fortfarande kan uppstå med denna typ av isolering – fantomläsning.

Fantomläsning

Note
Läs mer

Fantomläsningar uppstår när en transaktion kör om en fråga och hittar olika uppsättningar av rader som uppfyller det ursprungliga frågevillkoret.

Till exempel, anta att en transaktion frågar efter alla ordrar med ett totalbelopp över $1000. Om en annan transaktion infogar en ny order med ett totalbelopp som uppfyller detta villkor mellan den första och andra körningen av frågan, kommer den första transaktionen att observera denna extra rad vid den andra körningen, vilket resulterar i en fantomläsning.

Fantomläsning kan uppstå när en transaktion läser data och en annan transaktion lägger till nya poster i databasen. Som ett resultat kan vi få olika resultatmängder för två på varandra följande lästransaktioner.

phantom_read

Icke-repeterbar läsning vs fantomläsning

Icke-repeterbar läsning uppstår när samma fråga som körs av Användare A returnerar olika värden för samma rad mellan på varandra följande läsningar, vanligtvis på grund av ändringar av Användare B.

Fantomläsning, å andra sidan, inträffar när samma fråga som körs av Användare A returnerar olika uppsättningar av rader mellan på varandra följande läsningar, även om enskilda rader själva inte har uppdaterats.

Vi kan ange denna isoleringsnivå i vår SQL-fråga med följande kommando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable

Isoleringsnivån Serializable är den högsta nivån av isolering i databaser och säkerställer den mest strikta formen av samtidighetskontroll.
På denna nivå utförs transaktioner som om de behandlades seriellt, en efter en, även om de faktiskt kan köras parallellt. Detta säkerställer att resultatet av transaktionerna är detsamma som om de utfördes i någon seriell ordning, vilket bibehåller konsistens och förhindrar alla kända samtidighetsavvikelser.

Notera

Användning av denna typ av isolering kan leda till minskad prestanda på grund av ökad låsning.

Vi kan använda följande sats för att ställa in denna isoleringsnivå i vår SQL-fråga:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 7
some-alt