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
Avancerade Tekniker i SQL

bookIsolation. 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-repeterbara läsningar.
Det finns dock ett problem som fortfarande kan uppstå vid denna typ av isolering – phantom read.

Phantom read

Phantom read 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äsoperationer.

Non-repeatable read vs phantom read

Non-repeatable read 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.

Phantom read, å 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

Serializable-isoleringsnivån ä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.

Observera

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 ange 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:

Click or drag`n`drop items and fill in the blanks

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

Suggested prompts:

What is the difference between phantom read and non-repeatable read?

Can you give an example of how phantom reads occur in practice?

How does the Serializable isolation level prevent phantom reads?

Awesome!

Completion rate improved to 4.35

bookIsolation. 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-repeterbara läsningar.
Det finns dock ett problem som fortfarande kan uppstå vid denna typ av isolering – phantom read.

Phantom read

Phantom read 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äsoperationer.

Non-repeatable read vs phantom read

Non-repeatable read 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.

Phantom read, å 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

Serializable-isoleringsnivån ä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.

Observera

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 ange 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:

Click or drag`n`drop items and fill in the blanks

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 7
some-alt