Isolasjon. Lest Bekreftet og Ubekreftet Nivåer
I databaser refererer isolasjon til evnen et databasesystem har til å kontrollere synligheten av endringer gjort av samtidige transaksjoner. Dette sikrer at transaksjoner opererer uavhengig av hverandre, unngår forstyrrelser og opprettholder dataintegritet.
Det finnes 4 isolasjonsnivåer i SQL:
- read uncommitted;
- read committed;
- repeatable read;
- serializable.
Read uncommitted
Dette er det laveste isolasjonsnivået, hvor transaksjoner kan se endringer gjort av andre transaksjoner selv før de er bekreftet (committed). Dette nivået tillater skitne lesninger (dirty reads), noe som betyr at en transaksjon kan lese data som er endret av en annen transaksjon, men som ennå ikke er bekreftet.
Skitne lesninger
Implementering
For å angi isolasjonsnivået for en transaksjon kan vi bruke følgende kommando i spørringen:
-- 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 setningen endrer isolasjonsnivået for gjeldende transaksjon til "Read Uncommitted", slik at transaksjonen potensielt kan lese data som er endret av andre transaksjoner som ikke er bekreftet; -
denne kommandoen må brukes kun inne i transaksjonsblokken! Ellers vil den ikke ha noen effekt, og standard isolasjonsnivå vil bli brukt.
Vi kan også sjekke gjeldende isolasjonsnivå ved å bruke følgende kommando:
SHOW TRANSACTION ISOLATION LEVEL;
Read committed
Isolasjonsnivået Read Committed sikrer at en transaksjon kun ser data som er bekreftet av andre transaksjoner.
Dette betyr at ubekreftede endringer gjort av andre transaksjoner ikke er synlige for transaksjoner som opererer under Read Committed-isolasjon.
Som et resultat forhindrer det skitne lesninger ved at en transaksjon kun kan lese bekreftet data. Dette transaksjonsnivået har imidlertid problemer med ikke-repeterbare lesninger.
Ikke-repeterbare lesninger
Isolasjonsnivået "Read committed" tillater ikke-repeterbare lesninger fordi det låser leseoperasjonen på verdier som er under uavsluttede transaksjoner, men låser ikke skriveoperasjonen.
Som et resultat kan vi skrive nye data til raden som for øyeblikket leses av en annen transaksjon.
Tapt oppdatering
På grunn av mangelen på skrivelås oppstår det et ytterligere problem med read committed-isolasjonsnivået – tapte oppdateringer.
Tapte oppdateringer oppstår når to parallelle transaksjoner forsøker å endre samme rad. Som et resultat vil transaksjonen som blir bekreftet sist overskrive verdiene som er bekreftet av andre transaksjoner.
Implementering
Vi kan også angi dette isolasjonsnivået ved å bruke følgende kommandoer:
-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
/* Transaction query */
COMMIT;
Det er viktig å merke seg at Read Committed er standard isolasjonsnivå for de fleste databasesystemer, og derfor kan vi utelate å spesifisere det.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 4.35
Isolasjon. Lest Bekreftet og Ubekreftet Nivåer
Sveip for å vise menyen
I databaser refererer isolasjon til evnen et databasesystem har til å kontrollere synligheten av endringer gjort av samtidige transaksjoner. Dette sikrer at transaksjoner opererer uavhengig av hverandre, unngår forstyrrelser og opprettholder dataintegritet.
Det finnes 4 isolasjonsnivåer i SQL:
- read uncommitted;
- read committed;
- repeatable read;
- serializable.
Read uncommitted
Dette er det laveste isolasjonsnivået, hvor transaksjoner kan se endringer gjort av andre transaksjoner selv før de er bekreftet (committed). Dette nivået tillater skitne lesninger (dirty reads), noe som betyr at en transaksjon kan lese data som er endret av en annen transaksjon, men som ennå ikke er bekreftet.
Skitne lesninger
Implementering
For å angi isolasjonsnivået for en transaksjon kan vi bruke følgende kommando i spørringen:
-- 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 setningen endrer isolasjonsnivået for gjeldende transaksjon til "Read Uncommitted", slik at transaksjonen potensielt kan lese data som er endret av andre transaksjoner som ikke er bekreftet; -
denne kommandoen må brukes kun inne i transaksjonsblokken! Ellers vil den ikke ha noen effekt, og standard isolasjonsnivå vil bli brukt.
Vi kan også sjekke gjeldende isolasjonsnivå ved å bruke følgende kommando:
SHOW TRANSACTION ISOLATION LEVEL;
Read committed
Isolasjonsnivået Read Committed sikrer at en transaksjon kun ser data som er bekreftet av andre transaksjoner.
Dette betyr at ubekreftede endringer gjort av andre transaksjoner ikke er synlige for transaksjoner som opererer under Read Committed-isolasjon.
Som et resultat forhindrer det skitne lesninger ved at en transaksjon kun kan lese bekreftet data. Dette transaksjonsnivået har imidlertid problemer med ikke-repeterbare lesninger.
Ikke-repeterbare lesninger
Isolasjonsnivået "Read committed" tillater ikke-repeterbare lesninger fordi det låser leseoperasjonen på verdier som er under uavsluttede transaksjoner, men låser ikke skriveoperasjonen.
Som et resultat kan vi skrive nye data til raden som for øyeblikket leses av en annen transaksjon.
Tapt oppdatering
På grunn av mangelen på skrivelås oppstår det et ytterligere problem med read committed-isolasjonsnivået – tapte oppdateringer.
Tapte oppdateringer oppstår når to parallelle transaksjoner forsøker å endre samme rad. Som et resultat vil transaksjonen som blir bekreftet sist overskrive verdiene som er bekreftet av andre transaksjoner.
Implementering
Vi kan også angi dette isolasjonsnivået ved å bruke følgende kommandoer:
-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
/* Transaction query */
COMMIT;
Det er viktig å merke seg at Read Committed er standard isolasjonsnivå for de fleste databasesystemer, og derfor kan vi utelate å spesifisere det.
Takk for tilbakemeldingene dine!