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-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;
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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
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-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;
Tack för dina kommentarer!