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ź).
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 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.