Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Isolation | Acid
SQL-optimering og Forespørgselsfunktioner

bookIsolation

I databaser refererer isolation til evnen for et databasesystem til at kontrollere synligheden af ændringer foretaget af samtidige transaktioner. Det sikrer, at transaktioner opererer uafhængigt af hinanden, undgår indblanding og opretholder dataintegritet.

Der findes 4 isolationsniveauer i SQL:

  • read uncommitted;
  • read committed;
  • repeatable read;
  • serializable.

Read uncommitted

Dette er det laveste isolationsniveau, hvor transaktioner kan se ændringer foretaget af andre transaktioner, selv før de er committet. Dette niveau tillader dirty reads, hvilket betyder, at en transaktion kan læse data, der er blevet ændret af en anden transaktion, men endnu ikke er committet.

Dirty reads

Implementering

For at angive isolationsniveauet for transaktionen kan vi bruge følgende kommando i vores forespørgsel:

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Denne erklæring ændrer isolationsniveauet for den aktuelle transaktion til "Read Uncommitted", hvilket tillader transaktionen potentielt at læse data, der er ændret af andre ikke-committede transaktioner;

  • denne kommando skal kun bruges inden for transaktionsblokken! Ellers vil den ikke have nogen effekt, og et standard isolationsniveau vil blive brugt.

Vi kan også kontrollere det aktuelle isolationsniveau ved at bruge følgende kommando:
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

Isolationsniveauet Read Committed sikrer, at en transaktion kun ser data, der er blevet committet af andre transaktioner.
Dette betyder, at ikke-committede ændringer foretaget af andre transaktioner ikke er synlige for transaktioner, der opererer under Read Committed isolation.
Som resultat forhindrer det dirty reads ved kun at tillade en transaktion at læse committede data. Dog har dette transaktionsniveau problemer med non-repeatable reads.

Non-repeatable reads

"Read committed" isolationsniveauet tillader ikke-gentagelige læsninger, fordi det låser læseoperationen på værdier, der er under uafsluttede transaktioner, men låser ikke skriveoperationen.
Som følge heraf kan der skrives nye data til rækken, som i øjeblikket læses af en anden transaktion.

Tabt opdatering

På grund af manglen på skrivelås opstår der endnu et problem med read committed isolationsniveauet – tabte opdateringer.

Tabte opdateringer opstår, når to parallelle transaktioner forsøger at ændre den samme række. Som resultat overskriver den transaktion, der bliver committet sidst, de værdier, der er committet af andre transaktioner.

Implementering

Vi kan også angive dette isolationsniveau ved hjælp af følgende kommandoer:

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

Det er vigtigt at bemærke, at Read Committed er standard isolationsniveauet for de fleste databasehåndteringssystemer, hvilket betyder, at vi kan undlade at angive det.

question mark

Hvis en transaktion læser data, der er blevet ændret af en anden ikke-committet transaktion, hvilken type læsning er det?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 6

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:

Can you explain the other isolation levels like Repeatable Read and Serializable?

What are the main differences between dirty reads, non-repeatable reads, and lost updates?

Can you provide examples of when to use each isolation level?

Awesome!

Completion rate improved to 4.55

bookIsolation

Stryg for at vise menuen

I databaser refererer isolation til evnen for et databasesystem til at kontrollere synligheden af ændringer foretaget af samtidige transaktioner. Det sikrer, at transaktioner opererer uafhængigt af hinanden, undgår indblanding og opretholder dataintegritet.

Der findes 4 isolationsniveauer i SQL:

  • read uncommitted;
  • read committed;
  • repeatable read;
  • serializable.

Read uncommitted

Dette er det laveste isolationsniveau, hvor transaktioner kan se ændringer foretaget af andre transaktioner, selv før de er committet. Dette niveau tillader dirty reads, hvilket betyder, at en transaktion kan læse data, der er blevet ændret af en anden transaktion, men endnu ikke er committet.

Dirty reads

Implementering

For at angive isolationsniveauet for transaktionen kan vi bruge følgende kommando i vores forespørgsel:

-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/* Transaction query */
COMMIT;
  • SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Denne erklæring ændrer isolationsniveauet for den aktuelle transaktion til "Read Uncommitted", hvilket tillader transaktionen potentielt at læse data, der er ændret af andre ikke-committede transaktioner;

  • denne kommando skal kun bruges inden for transaktionsblokken! Ellers vil den ikke have nogen effekt, og et standard isolationsniveau vil blive brugt.

Vi kan også kontrollere det aktuelle isolationsniveau ved at bruge følgende kommando:
SHOW TRANSACTION ISOLATION LEVEL;

Read committed

Isolationsniveauet Read Committed sikrer, at en transaktion kun ser data, der er blevet committet af andre transaktioner.
Dette betyder, at ikke-committede ændringer foretaget af andre transaktioner ikke er synlige for transaktioner, der opererer under Read Committed isolation.
Som resultat forhindrer det dirty reads ved kun at tillade en transaktion at læse committede data. Dog har dette transaktionsniveau problemer med non-repeatable reads.

Non-repeatable reads

"Read committed" isolationsniveauet tillader ikke-gentagelige læsninger, fordi det låser læseoperationen på værdier, der er under uafsluttede transaktioner, men låser ikke skriveoperationen.
Som følge heraf kan der skrives nye data til rækken, som i øjeblikket læses af en anden transaktion.

Tabt opdatering

På grund af manglen på skrivelås opstår der endnu et problem med read committed isolationsniveauet – tabte opdateringer.

Tabte opdateringer opstår, når to parallelle transaktioner forsøger at ændre den samme række. Som resultat overskriver den transaktion, der bliver committet sidst, de værdier, der er committet af andre transaktioner.

Implementering

Vi kan også angive dette isolationsniveau ved hjælp af følgende kommandoer:

-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

/* Transaction query */
COMMIT;

Det er vigtigt at bemærke, at Read Committed er standard isolationsniveauet for de fleste databasehåndteringssystemer, hvilket betyder, at vi kan undlade at angive det.

question mark

Hvis en transaktion læser data, der er blevet ændret af en anden ikke-committet transaktion, hvilken type læsning er det?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 6
some-alt