TRANSAKCJE, BLOKADY, ZAKLESZCZENIA

Trochę teorii:

TRANSAKCJA - jest to akcja przeprowadzana na bazie danych związana z modyfikowaniem danych.

Cechy transakcji (ACID – zbiór właściwości gwarantujących poprawne przetwarzanie transakcji w bazach danych. ACID jest skrótowcem od angielskich słów atomicity, consistency, isolation, durability, czyli niepodzielność[a], spójność, izolacja, trwałość):

Typowy przebieg transakcji:

1. Rozpoczęcie transakcji

2. Zapis tymczasowy danych

3. Sprawdzenie spójności danych

4. Utrwalenie lub wycofanie zmian


Transakcje rozpoczyna się słowem BEGIN (rozpocznij), a kończy słowem COMMIT (potwierdź).

Przykład:

Tworzymy tabelę:

CREATE TABLE osoby (
osoby_id SERIAL PRIMARY KEY,
imie VARCHAR(15),
nazwisko VARCHAR(20),
wiek INT(3) );


Wypełniamy tabelę danymi:

INSERT INTO osoby(imie, nazwisko, wiek) VALUES ('Jan','Nowak','23');

INSERT INTO osoby(imie, nazwisko, wiek) VALUES ('Jacek','Marszelik','47');

INSERT INTO osoby(imie, nazwisko, wiek) VALUES ('Janina','Graj','33');

INSERT INTO osoby(imie, nazwisko, wiek) VALUES ('Adam','Nowy','65');

INSERT INTO osoby(imie, nazwisko, wiek) VALUES ('Katarzyna','Kowalska','17');

Uzyskany efekt (tabela osoby)


Modyfikujemy tabelę poleceniem:
BEGIN;
UPDATE osoby SET wiek = 18 WHERE osoby_id > 2;

Usykujemy efekt w postaci informacji:

Cofnięcie zmian można dokonać zapytaniem: ROLLBACK;

Jeżeli chcemy mieć wływ na zmianę danych można utworzyć punkty przywracania za pomocą polecenia: SAVEPOINT

Kod zapytań może wyglądać np. tak:
BEGIN;
UPDATE osoby SET wiek = 18 WHERE osoby_id > 5;
SAVEPOINT point_1;
UPDATE osoby SET wiek = 18 WHERE osoby_id > 4;
SAVEPOINT point_2;
UPDATE osoby SET wiek = 18 WHERE osoby_id > 3;
SAVEPOINT point_3;

Tworzymy w ten sposób 3 punkty przywracania do których możemy wrócić cofając zmiany.

Usykujemy efekt w postaci informacji:

Cofnijmy zmiany do 2 punktu przywracania za pomocą polecenia:
RELEASE SAVEPOINT point_2;

BLOKADY i ZAKLESZCZENIA

Blokady i zakleszczenia są prawidłowością przy dobrze zaprojektowanej bazie danych.

BLOKADA występuje wówczas, gdy jedna transakcja jest w trakcie wykonywania swoich zapytań na bazie danych.

ZAKLESZCZENIE występuje wówczas, gdy co najmniej dwie transakcje czekają na wykonanie swoich zapytań i obie nakładają blokadę na siebie.


⇒ Spis treści ⇐

⇐ PREV NEXT ⇒