Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Atomisuus | Acid
Edistyneet SQL-Tekniikat

bookAtomisuus

Atomisuus SQL:ssä viittaa yhteen ACID-ominaisuuksista, joka varmistaa, että käytämme transaktioita tietoja kysyttäessä SQL:llä.
SQL-tietokantojen yhteydessä atomisuus takaa, että kaikki toiminnot tietyn loogisen yksikön sisällä suoritetaan kokonaan tai ei yhtään niistä.

Transaktioiden käsittely SQL:ssä

Keskeiset ominaisuudet

  • Palautus (Rollback): Jos jokin osa epäonnistuu (esim. virheen tai rajoitteen rikkomisen vuoksi), koko transaktio palautetaan ja muutokset peruutetaan;

  • Vahvistus (Commit): Jos kaikki toiminnot onnistuvat, transaktio vahvistetaan ja muutokset tallennetaan pysyvästi.

Transaktioiden luominen SQL:ssä

SQL:ssä jokainen yksittäinen lause katsotaan transaktioksi.
Voimme kuitenkin luoda manuaalisesti transaktioita, jotka sisältävät useamman kuin yhden lauseen.

Kuvitellaan tilanne, jossa meillä on kaksi taulua:

  • BankAccounts-taulu, joka sisältää seuraavat sarakkeet: account_number (Primary Key), account_holder ja balance;

  • UserLogs-taulu, jossa on sarakkeet: account_number, action, timestamp jne. Sarakkeiden account_number ja timestamp yhdistelmä muodostaa tämän relaation yhdistetyn pääavaimen.

Tarkastellaanpa nyt tilannetta, jossa tarkoituksena on luoda uusi pankkitili ja samanaikaisesti luoda lokimerkintä uuden tilin lisäämisestä.
On olennaista, että nämä kaksi toimenpidettä, tilin lisääminen ja tapahtuman kirjaaminen, käsitellään yhtenä loogisena kokonaisuutena ja ne tulee sisällyttää samaan transaktioon. Tässä on hyvin yksinkertainen esimerkki siitä, miten tämä voidaan toteuttaa transaktion avulla:

-- Begin the transaction
BEGIN;

-- Insert a new bank account with account number 109, account holder Emma Watson, and initial balance of 0
INSERT INTO BankAccounts (account_number, account_holder, balance)
VALUES (109, 'Emma Watson', 0);

-- Step 2: Add log entry if the account was added
-- Insert a log entry into the UserLogs table indicating that a new account was added with account number 109
INSERT INTO UserLogs (account_number, action)
VALUES (109, 'New account added');

-- Commit the transaction, making the changes permanent
COMMIT;

Yllä olevassa kyselyssä käytetään BEGIN-lohkoa osoittamaan, että kaikki seuraavat lauseet tulee käsitellä yhtenä kokonaisuutena – jos yksikään niistä ei onnistu, mitään lauseista ei tule suorittaa.
COMMIT-avainsana osoittaa transaktiolohkon päättymisen.

question mark

Mitä atomisuuden käsite takaa tietokantatransaktioiden yhteydessä?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 3

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

Can you explain what would happen if one of the INSERT statements failed?

How does rollback work in this scenario?

Can you show an example where the transaction fails and is rolled back?

Awesome!

Completion rate improved to 4.35

bookAtomisuus

Pyyhkäise näyttääksesi valikon

Atomisuus SQL:ssä viittaa yhteen ACID-ominaisuuksista, joka varmistaa, että käytämme transaktioita tietoja kysyttäessä SQL:llä.
SQL-tietokantojen yhteydessä atomisuus takaa, että kaikki toiminnot tietyn loogisen yksikön sisällä suoritetaan kokonaan tai ei yhtään niistä.

Transaktioiden käsittely SQL:ssä

Keskeiset ominaisuudet

  • Palautus (Rollback): Jos jokin osa epäonnistuu (esim. virheen tai rajoitteen rikkomisen vuoksi), koko transaktio palautetaan ja muutokset peruutetaan;

  • Vahvistus (Commit): Jos kaikki toiminnot onnistuvat, transaktio vahvistetaan ja muutokset tallennetaan pysyvästi.

Transaktioiden luominen SQL:ssä

SQL:ssä jokainen yksittäinen lause katsotaan transaktioksi.
Voimme kuitenkin luoda manuaalisesti transaktioita, jotka sisältävät useamman kuin yhden lauseen.

Kuvitellaan tilanne, jossa meillä on kaksi taulua:

  • BankAccounts-taulu, joka sisältää seuraavat sarakkeet: account_number (Primary Key), account_holder ja balance;

  • UserLogs-taulu, jossa on sarakkeet: account_number, action, timestamp jne. Sarakkeiden account_number ja timestamp yhdistelmä muodostaa tämän relaation yhdistetyn pääavaimen.

Tarkastellaanpa nyt tilannetta, jossa tarkoituksena on luoda uusi pankkitili ja samanaikaisesti luoda lokimerkintä uuden tilin lisäämisestä.
On olennaista, että nämä kaksi toimenpidettä, tilin lisääminen ja tapahtuman kirjaaminen, käsitellään yhtenä loogisena kokonaisuutena ja ne tulee sisällyttää samaan transaktioon. Tässä on hyvin yksinkertainen esimerkki siitä, miten tämä voidaan toteuttaa transaktion avulla:

-- Begin the transaction
BEGIN;

-- Insert a new bank account with account number 109, account holder Emma Watson, and initial balance of 0
INSERT INTO BankAccounts (account_number, account_holder, balance)
VALUES (109, 'Emma Watson', 0);

-- Step 2: Add log entry if the account was added
-- Insert a log entry into the UserLogs table indicating that a new account was added with account number 109
INSERT INTO UserLogs (account_number, action)
VALUES (109, 'New account added');

-- Commit the transaction, making the changes permanent
COMMIT;

Yllä olevassa kyselyssä käytetään BEGIN-lohkoa osoittamaan, että kaikki seuraavat lauseet tulee käsitellä yhtenä kokonaisuutena – jos yksikään niistä ei onnistu, mitään lauseista ei tule suorittaa.
COMMIT-avainsana osoittaa transaktiolohkon päättymisen.

question mark

Mitä atomisuuden käsite takaa tietokantatransaktioiden yhteydessä?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 3
some-alt