Isolation. Gentagelig Læsning og Serialiserbare Niveauer
Repeatable Read
Isolationsniveauet Repeatable Read i databaser sikrer, at når en transaktion påbegyndes, vises et øjebliksbillede af databasen, som forbliver uændret under hele opgaven.
Dette betyder, at selvom der sker ændringer i databasen, mens du arbejder, vil du kun se dataene, som de var ved transaktionens start.
Transaktioner under Repeatable Read-isolation holder læselåse på alle rækker, de refererer til, og skrivelåse på rækker, de indsætter, opdaterer eller sletter. Dette forhindrer tabte opdateringer, beskidte og ikke-repeatable læsninger.
Dog opstår der stadig et problem ved brug af denne isolationstype – phantom read.
Phantom read
Phantom read kan opstå, når én transaktion læser data, og en anden transaktion tilføjer nye poster til databasen. Som følge heraf kan der opnås forskellige resultatsæt for to på hinanden følgende læse-transaktioner.
Non-repeatable read vs phantom read
Non-repeatable read opstår, når den samme forespørgsel udført af Bruger A returnerer forskellige værdier for den samme række mellem på hinanden følgende læsninger, typisk på grund af ændringer foretaget af Bruger B.
Phantom read opstår derimod, når den samme forespørgsel udført af Bruger A returnerer forskellige sæt af rækker mellem på hinanden følgende læsninger, selvom de enkelte rækker ikke nødvendigvis er blevet opdateret.
Vi kan angive dette isolationsniveau i vores SQL-forespørgsel ved at bruge følgende kommando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Serializable-isolationsniveauet er det højeste niveau af isolation i databaser og sikrer den strengeste form for samtidighedskontrol.
På dette niveau udføres transaktioner, som om de blev behandlet serielt, én efter én, selvom de faktisk kan blive udført samtidigt. Dette sikrer, at resultatet af transaktionerne er det samme, som hvis de blev udført i en eller anden seriel rækkefølge, hvilket opretholder konsistens og forhindrer alle kendte samtidighedsanomalier.
Bemærk
Anvendelse af denne type isolation kan føre til nedsat ydeevne på grund af øget låsning.
Vi kan bruge følgende erklæring til at angive dette isolationsniveau i vores SQL-forespørgsel:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 4.55
Isolation. Gentagelig Læsning og Serialiserbare Niveauer
Stryg for at vise menuen
Repeatable Read
Isolationsniveauet Repeatable Read i databaser sikrer, at når en transaktion påbegyndes, vises et øjebliksbillede af databasen, som forbliver uændret under hele opgaven.
Dette betyder, at selvom der sker ændringer i databasen, mens du arbejder, vil du kun se dataene, som de var ved transaktionens start.
Transaktioner under Repeatable Read-isolation holder læselåse på alle rækker, de refererer til, og skrivelåse på rækker, de indsætter, opdaterer eller sletter. Dette forhindrer tabte opdateringer, beskidte og ikke-repeatable læsninger.
Dog opstår der stadig et problem ved brug af denne isolationstype – phantom read.
Phantom read
Phantom read kan opstå, når én transaktion læser data, og en anden transaktion tilføjer nye poster til databasen. Som følge heraf kan der opnås forskellige resultatsæt for to på hinanden følgende læse-transaktioner.
Non-repeatable read vs phantom read
Non-repeatable read opstår, når den samme forespørgsel udført af Bruger A returnerer forskellige værdier for den samme række mellem på hinanden følgende læsninger, typisk på grund af ændringer foretaget af Bruger B.
Phantom read opstår derimod, når den samme forespørgsel udført af Bruger A returnerer forskellige sæt af rækker mellem på hinanden følgende læsninger, selvom de enkelte rækker ikke nødvendigvis er blevet opdateret.
Vi kan angive dette isolationsniveau i vores SQL-forespørgsel ved at bruge følgende kommando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Serializable-isolationsniveauet er det højeste niveau af isolation i databaser og sikrer den strengeste form for samtidighedskontrol.
På dette niveau udføres transaktioner, som om de blev behandlet serielt, én efter én, selvom de faktisk kan blive udført samtidigt. Dette sikrer, at resultatet af transaktionerne er det samme, som hvis de blev udført i en eller anden seriel rækkefølge, hvilket opretholder konsistens og forhindrer alle kendte samtidighedsanomalier.
Bemærk
Anvendelse af denne type isolation kan føre til nedsat ydeevne på grund af øget låsning.
Vi kan bruge følgende erklæring til at angive dette isolationsniveau i vores SQL-forespørgsel:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Tak for dine kommentarer!