Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Isolasjon | Acid
Quizzes & Challenges
Quizzes
Challenges
/
SQL-optimalisering og spørringsfunksjoner

bookIsolasjon

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. 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 ikke-bekreftede transaksjoner;

  • 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 ikke-bekreftede endringer gjort av andre transaksjoner ikke er synlige for transaksjoner som opererer under Read Committed isolasjon.
Som et resultat forhindrer det skitne lesninger ved å tillate en transaksjon å lese kun bekreftede 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 behandling i ikke-committede 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 fraværet av 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 committer sist overskrive verdiene som er commitet 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.

question mark

Hvis en transaksjon leser data som har blitt endret av en annen ikke-committet transaksjon, hvilken type lesing er det?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 6

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

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

bookIsolasjon

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. 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 ikke-bekreftede transaksjoner;

  • 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 ikke-bekreftede endringer gjort av andre transaksjoner ikke er synlige for transaksjoner som opererer under Read Committed isolasjon.
Som et resultat forhindrer det skitne lesninger ved å tillate en transaksjon å lese kun bekreftede 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 behandling i ikke-committede 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 fraværet av 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 committer sist overskrive verdiene som er commitet 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.

question mark

Hvis en transaksjon leser data som har blitt endret av en annen ikke-committet transaksjon, hvilken type lesing er det?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 6
some-alt