Eristys. Luettu Vahvistettu ja Vahvistamaton Taso
Tietokantojen yhteydessä eristyvyys tarkoittaa tietokantajärjestelmän kykyä hallita samanaikaisten transaktioiden tekemien muutosten näkyvyyttä. Se varmistaa, että transaktiot toimivat riippumattomasti toisistaan, estäen häiriöt ja säilyttäen tietojen eheyden.
SQL:ssä on 4 eristyvyystasoa:
- read uncommitted;
- read committed;
- repeatable read;
- serializable.
Read uncommitted
Tämä on alin eristyvyystaso, jossa transaktiot voivat nähdä muiden transaktioiden tekemät muutokset jo ennen niiden vahvistamista. Tämä taso sallii likaiset luvut (dirty reads), eli transaktio voi lukea tietoja, joita toinen transaktio on muuttanut mutta joita ei ole vielä vahvistettu.
Likaiset luvut
Toteutus
Transaktion eristyvyystason määrittämiseksi voidaan käyttää seuraavaa komentoa kyselyssä:
-- 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;
: Tämä lauseke muuttaa nykyisen transaktion eristyvyystason "Read Uncommitted" -tasolle, jolloin transaktio voi mahdollisesti lukea muiden vahvistamattomien transaktioiden muokkaamia tietoja; -
tätä komentoa tulee käyttää vain transaktiolohkon sisällä! Muuten sillä ei ole vaikutusta ja oletuseristyvyystasoa käytetään.
Nykyisen eristyvyystason voi tarkistaa seuraavalla komennolla:
SHOW TRANSACTION ISOLATION LEVEL;
Read committed
Read Committed -eristyvyystaso varmistaa, että transaktio näkee vain muiden transaktioiden vahvistamat tiedot.
Tämä tarkoittaa, että muiden transaktioiden tekemät vahvistamattomat muutokset eivät ole näkyvissä Read Committed -eristyvyystasolla toimiville transaktioille.
Tämän seurauksena se estää likaiset luvut sallimalla transaktion lukea vain vahvistettuja tietoja. Kuitenkin tällä transaktiotasolla esiintyy ongelmia ei-toistettavien lukujen (non-repeatable reads) kanssa.
Ei-toistettavat luvut
"Read committed" -eristystaso sallii ei-toistettavat luvut, koska se lukitsee lukuoperaation arvoihin, jotka ovat keskeneräisissä transaktioissa, mutta ei lukitse kirjoitusoperaatiota.
Tämän seurauksena voimme kirjoittaa uutta dataa riviin, jota toinen transaktio parhaillaan lukee.
Kadonneet päivitykset
Kirjoituslukon puuttumisen vuoksi read committed -eristystasolla esiintyy vielä yksi ongelma – kadonneet päivitykset.
Kadonneet päivitykset tapahtuvat, kun kaksi rinnakkaista transaktiota yrittää muuttaa samaa riviä. Tällöin myöhemmin vahvistettu transaktio korvaa muiden transaktioiden vahvistamat arvot.
Toteutus
Voimme määrittää tämän eristystason myös seuraavilla komennoilla:
-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
/* Transaction query */
COMMIT;
On tärkeää huomata, että Read Committed on useimpien tietokantahallintajärjestelmien oletuseristystaso, minkä vuoksi sen määrittäminen voidaan usein jättää pois.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 4.35
Eristys. Luettu Vahvistettu ja Vahvistamaton Taso
Pyyhkäise näyttääksesi valikon
Tietokantojen yhteydessä eristyvyys tarkoittaa tietokantajärjestelmän kykyä hallita samanaikaisten transaktioiden tekemien muutosten näkyvyyttä. Se varmistaa, että transaktiot toimivat riippumattomasti toisistaan, estäen häiriöt ja säilyttäen tietojen eheyden.
SQL:ssä on 4 eristyvyystasoa:
- read uncommitted;
- read committed;
- repeatable read;
- serializable.
Read uncommitted
Tämä on alin eristyvyystaso, jossa transaktiot voivat nähdä muiden transaktioiden tekemät muutokset jo ennen niiden vahvistamista. Tämä taso sallii likaiset luvut (dirty reads), eli transaktio voi lukea tietoja, joita toinen transaktio on muuttanut mutta joita ei ole vielä vahvistettu.
Likaiset luvut
Toteutus
Transaktion eristyvyystason määrittämiseksi voidaan käyttää seuraavaa komentoa kyselyssä:
-- 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;
: Tämä lauseke muuttaa nykyisen transaktion eristyvyystason "Read Uncommitted" -tasolle, jolloin transaktio voi mahdollisesti lukea muiden vahvistamattomien transaktioiden muokkaamia tietoja; -
tätä komentoa tulee käyttää vain transaktiolohkon sisällä! Muuten sillä ei ole vaikutusta ja oletuseristyvyystasoa käytetään.
Nykyisen eristyvyystason voi tarkistaa seuraavalla komennolla:
SHOW TRANSACTION ISOLATION LEVEL;
Read committed
Read Committed -eristyvyystaso varmistaa, että transaktio näkee vain muiden transaktioiden vahvistamat tiedot.
Tämä tarkoittaa, että muiden transaktioiden tekemät vahvistamattomat muutokset eivät ole näkyvissä Read Committed -eristyvyystasolla toimiville transaktioille.
Tämän seurauksena se estää likaiset luvut sallimalla transaktion lukea vain vahvistettuja tietoja. Kuitenkin tällä transaktiotasolla esiintyy ongelmia ei-toistettavien lukujen (non-repeatable reads) kanssa.
Ei-toistettavat luvut
"Read committed" -eristystaso sallii ei-toistettavat luvut, koska se lukitsee lukuoperaation arvoihin, jotka ovat keskeneräisissä transaktioissa, mutta ei lukitse kirjoitusoperaatiota.
Tämän seurauksena voimme kirjoittaa uutta dataa riviin, jota toinen transaktio parhaillaan lukee.
Kadonneet päivitykset
Kirjoituslukon puuttumisen vuoksi read committed -eristystasolla esiintyy vielä yksi ongelma – kadonneet päivitykset.
Kadonneet päivitykset tapahtuvat, kun kaksi rinnakkaista transaktiota yrittää muuttaa samaa riviä. Tällöin myöhemmin vahvistettu transaktio korvaa muiden transaktioiden vahvistamat arvot.
Toteutus
Voimme määrittää tämän eristystason myös seuraavilla komennoilla:
-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
/* Transaction query */
COMMIT;
On tärkeää huomata, että Read Committed on useimpien tietokantahallintajärjestelmien oletuseristystaso, minkä vuoksi sen määrittäminen voidaan usein jättää pois.
Kiitos palautteestasi!