Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Isolation: Repeatable Read og Serializable Niveauer | Acid
Avancerede Teknikker i SQL

bookIsolation: Repeatable Read og Serializable Niveauer

Repeatable Read

Repeatable Read-isoleringsniveauet i databaser sikrer, at når du starter en transaktion, ser du et øjebliksbillede af databasen, der forbliver uændret under hele din opgave.
Dette betyder, at selvom der sker andre ændringer i databasen, mens du arbejder, vil du kun se dataene, som de var, da du begyndte.
Transaktioner under Repeatable Read-isolering 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 er der stadig et problem, der kan opstå ved denne type isolering - 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 vi få forskellige resultatsæt for to på hinanden følgende læsninger.

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.

Note

Anvendelse af denne type isolation kan føre til nedsat ydeevne på grund af øget låsning.

Vi kan bruge følgende statement til at sætte dette isolationsniveau i vores SQL-forespørgsel:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

Match isolationsniveauerne med deres beskrivelser.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

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

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 7

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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 og Serializable Niveauer

Stryg for at vise menuen

Repeatable Read

Repeatable Read-isoleringsniveauet i databaser sikrer, at når du starter en transaktion, ser du et øjebliksbillede af databasen, der forbliver uændret under hele din opgave.
Dette betyder, at selvom der sker andre ændringer i databasen, mens du arbejder, vil du kun se dataene, som de var, da du begyndte.
Transaktioner under Repeatable Read-isolering 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 er der stadig et problem, der kan opstå ved denne type isolering - 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 vi få forskellige resultatsæt for to på hinanden følgende læsninger.

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.

Note

Anvendelse af denne type isolation kan føre til nedsat ydeevne på grund af øget låsning.

Vi kan bruge følgende statement til at sætte dette isolationsniveau i vores SQL-forespørgsel:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

Match isolationsniveauerne med deres beskrivelser.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

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

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 7
some-alt