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

bookIsolation. Læst Bekræftede og Ubekræftede Niveauer

I databaser refererer isolation til en databasesystems evne til at kontrollere synligheden af ændringer foretaget af samtidige transaktioner. Det sikrer, at transaktioner opererer på en måde, der er uafhængig af hinanden, hvilket forhindrer forstyrrelser 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 blevet 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 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 sætning æ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 hjælp af 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

Isolationsniveauet "Read committed" 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 vi skrive nye data til rækken, der i øjeblikket læses af en anden transaktion.

Tabt opdatering

På grund af manglen på en skrivelås er 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:

What are the other two isolation levels besides Read Uncommitted and Read Committed?

Can you explain what repeatable read and serializable isolation levels are?

How do non-repeatable reads and lost updates affect data consistency?

Awesome!

Completion rate improved to 4.35

bookIsolation. Læst Bekræftede og Ubekræftede Niveauer

Stryg for at vise menuen

I databaser refererer isolation til en databasesystems evne til at kontrollere synligheden af ændringer foretaget af samtidige transaktioner. Det sikrer, at transaktioner opererer på en måde, der er uafhængig af hinanden, hvilket forhindrer forstyrrelser 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 blevet 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 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 sætning æ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 hjælp af 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

Isolationsniveauet "Read committed" 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 vi skrive nye data til rækken, der i øjeblikket læses af en anden transaktion.

Tabt opdatering

På grund af manglen på en skrivelås er 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