Isolation. 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.
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
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
Isolation. 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.
Tak for dine kommentarer!