Dnevniki transakcij v MySQL igrajo ključno vlogo pri zagotavljanju varnosti podatkov in obnavljanju podatkovne baze po napaki. Tukaj je primer:

1. Postopek izvajanja transakcije z uporabo dnevnikov

Predstavljajmo si, da aplikacija izvaja naslednjo transakcijo v MySQL:

START TRANSACTION;

-- Korak 1: Dodaj zapis v tabelo `Naročila`
INSERT INTO Naročila (ID, Kupec, Izdelek, Količina, Datum) 
VALUES (123, 'Janez', 'Knjižica', 1, '2025-01-14');

-- Korak 2: Posodobi stanje zalog v tabeli `Izdelki`
UPDATE Izdelki 
SET Zaloga = Zaloga - 1 
WHERE Izdelek = 'Knjižica';

-- Korak 3: Dodaj zapis v tabelo `Plačila`
INSERT INTO Plačila (ID, NaročiloID, Znesek, Datum) 
VALUES (456, 123, 15.00, '2025-01-14');

-- Potrditev transakcije
COMMIT;

2. Simulacija napake

Med izvajanjem transakcije, denimo med drugim korakom (UPDATE Izdelki), pride do napake (npr. strojne napake ali izpada elektrike).

3. Obnavljanje s pomočjo dnevnika

Ko se MySQL podatkovna baza ponovno zažene, se z uporabo dnevnikov transakcij (redo log in undo log) izvede obnova:

  • MySQL pregleda transakcijo v dnevniku in ugotovi, da transakcija ni bila potrjena (COMMIT ni izveden).
  • MySQL samodejno izvede povrnitev (rollback) vseh operacij te transakcije.

Primer povrnitve:

-- Povrnitev prvega koraka (odstranitev vstavljene vrstice iz `Naročila`)
DELETE FROM Naročila WHERE ID = 123;

-- Povrnitev drugega koraka (ponovna nastavitev zaloge)
UPDATE Izdelki 
SET Zaloga = Zaloga + 1 
WHERE Izdelek = 'Knjižica';

-- Povrnitev tretjega koraka (odstranitev vstavljene vrstice iz `Plačila`)
DELETE FROM Plačila WHERE ID = 456;

4. Rezultat

Stanje podatkovne baze je povrnjeno v stanje pred začetkom transakcije, kar zagotavlja skladnost in celovitost podatkov.

Ključni elementi dnevnikov v MySQL:

  1. Binary Log (binlog): Beleži vse spremembe v podatkovni bazi, ki jih je mogoče ponovno izvesti (redo log). Uporablja se tudi za replikacijo.
  2. Undo Log: Beleži podatke za povrnitev sprememb, če transakcija ni bila potrjena.
  3. Transaction Isolation: Vzpostavlja pravila za sočasne transakcije in preprečuje konflikte.

Prednosti uporabe dnevnikov v MySQL:

  1. Zanesljivost podatkov: Zagotavljanje, da so potrjene transakcije trajno shranjene.
  2. Obnova po napaki: Povrnitev nepoterjenih sprememb in ponovna izvedba potrjenih transakcij.
  3. Podpora za ACID načela: Celovitost, skladnost, izolacija in trajnost transakcij.

Dnevniki so tako ključni del MySQL, saj zagotavljajo odpornost proti napakam in zanesljivo delovanje aplikacij.

Zadnja sprememba: torek, 14. januar 2025, 19.41