Kurs PostgreSQL 11 – Transakcje cz.31

Print Friendly, PDF & Email

Transakcje Nieco Teorii…

Jedną z najistotniejszych rzeczy w pracy z bazami danych (relacyjnymi) są właśnie transakcje. Krótko mówiąc jest to pewien zbiór operacji, które muszą zostać wykonane w całości lub nie mogą zostać wykonane w ogóle. Działa tutaj zasada ACID.

  • Atomicity – niepodzielność
  • Consistency – spójność
  • Isolation – izolacja
  • Durability – twałość

Przykładem transakcji może być transakcja bankowa jaką jest przelew. Muszą tu zostać dokonane dwie operacje – zabranie pieniędzy z jednego konta oraz dopisanie ich do drugiego. W przypadku niepowodzenia żadna z tych operacji nie powinna być zatwierdzona, gdyż zajście tylko jednej powodowałoby nieprawidłowości w bazie danych (pojawienie się lub zniknięcie pieniędzy).

Transakcja składa się zawsze z trzech etapów:

  • rozpoczęcia,
  • wykonania,
  • zamknięcia

W systemach bazodanowych istotne jest, aby transakcja trwała jak najkrócej, ponieważ równolegle może być dokonywanych wiele transakcji i część operacji musi zostać wykonana w pewnej kolejności. Każdy etap transakcji jest logowany, dzięki czemu w razie awarii systemu (dzięki zawartości logów) można odtworzyć stan bazy danych sprzed transakcji, która nie została zamknięta.

Część systemów baz danych umożliwia używanie punktów pośrednich (ang. save point), są to zapamiętane w systemie etapy transakcji, do których w razie wystąpienia błędu można się wycofać, bez konieczności anulowania wszystkich wykonanych działań.

Transakcje Przykłady, Przykłady…

Na początek musisz dodać nową tabelę do testowej bazy, niech będzie to accounts.

Struktura tabeli nie będzie skomplikowana.

Jako, że badamy transakcyjność poniższy insert raczej niewiele pomoże.

Takie podejście po prostu działa, jednak co w przypadku gdy nastąpi błąd w przelewie?, pieniądze nie zostaną przelane na docelowe konto i nie wrócą na konto nadawcy. Takiej sytuacji raczej nikt nie chce. Właśnie dlatego warto rozumieć transakcje w bazie danych.

Dodaj teraz nowy wpis do tabeli, ale nieco inaczej. Na początek w Query Tool, musisz dodać jedną z trzech wersji rozpoczęcia transakcji:

  • BEGIN TRANSACTION;
  • BEGIN WORK;
  • BEGIN;

Dalej dodaj kolejny insert dla nowego klienta

W tym momencie możesz otworzyć kolejne okno z Query Tool, i wykonać:

Pomimo, że insert został wykonany nie widać jego wyniku.

Jeżeli wykonasz ten sam Select w oknie gdzie wpisałeś insert, ten wpis się pojawi, dlaczego? No właśnie to jest transakcja, która w tym momencie jest zawieszona ( a raczej czeka na zakończenie). Widzisz, że takie sterowanie przepływem danych jest wygodne, a jednocześnie jeżeli zaginie w sieci, może spowodować sporo kłopotów. Dlatego tak istotne jest posiadanie backupu również logów transakcyjnych.

Transakcje

Na koniec, aby cała procedura została przeprowadzona poprawnie, należy zamknąć sesję transakcji. Dzięki takiemu podejściu dane dodane w drugim insercie zostaną zatwierdzone oraz zachowana zostanie ich spójność w bazie.

Podobnie jak przy rozpoczęciu transakcji, również zakończenie możesz wykonać na jeden z trzech sposobów.

  • COMMIT WORK;
  • COMMIT TRANSACTION;
  • COMMIT;

Będąc w oknie Query Tools, tam gdzie został wykonany drugi insert oraz Select, dodaj po prostu.

Dane zostały zapisane, co kończy również ten wpis.

Podsumowanie

Transakcje są bardzo istotne, na trudne czasy warto dodać jeszcze backup logów i można spać spokojniej.

Print Friendly, PDF & Email

Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.

Link do formularza tutaj: https://beitadmin.pl/pomysly

Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).

4 komentarze do “Kurs PostgreSQL 11 – Transakcje cz.31”

Dodaj komentarz

beitadmin.pl - Droga Administratora IT