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

bookAtomisuus

Atomisuus SQL:ssä viittaa yhteen ACID-ominaisuuksista, joka varmistaa, että käytämme transaktioita tietoja kyseltäessä SQL:n avulla.
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.

Seuraavissa koodiesimerkeissä näet, miten tietoja lisätään ja hallitaan näissä tauluissa, havainnollistaen atomisia operaatioita annetun skeeman oikeilla tietueilla.

12
SELECT * FROM BankAccounts;
copy
12
SELECT * FROM UserLogs;
copy

Tarkastellaan nyt tilannetta, jossa tarkoituksena on luoda uusi pankkitili ja samanaikaisesti muodostaa 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:

123456789101112131415161718
-- 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; -- Check the result SELECT * FROM BankAccounts; SELECT * FROM UserLogs;
copy

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

question mark

Mitä atomisuuden käsite varmistaa 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 statements in the transaction fails?

How does rollback work in this scenario?

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

bookAtomisuus

Pyyhkäise näyttääksesi valikon

Atomisuus SQL:ssä viittaa yhteen ACID-ominaisuuksista, joka varmistaa, että käytämme transaktioita tietoja kyseltäessä SQL:n avulla.
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.

Seuraavissa koodiesimerkeissä näet, miten tietoja lisätään ja hallitaan näissä tauluissa, havainnollistaen atomisia operaatioita annetun skeeman oikeilla tietueilla.

12
SELECT * FROM BankAccounts;
copy
12
SELECT * FROM UserLogs;
copy

Tarkastellaan nyt tilannetta, jossa tarkoituksena on luoda uusi pankkitili ja samanaikaisesti muodostaa 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:

123456789101112131415161718
-- 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; -- Check the result SELECT * FROM BankAccounts; SELECT * FROM UserLogs;
copy

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

question mark

Mitä atomisuuden käsite varmistaa tietokantatransaktioiden yhteydessä?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 3
some-alt