poniedziałek, 3 września 2018

SQL - Transakcje


SQL - Transakcje

Transakcja jest jednostką pracy wykonywaną względem bazy danych. Transakcje to jednostki lub sekwencje pracy wykonane w logicznej kolejności, czy to w sposób ręczny przez użytkownika, czy automatycznie za pomocą jakiegoś programu bazodanowego.
Transakcja jest propagacją jednej lub więcej zmian w bazie danych. Na przykład, jeśli tworzysz rekord lub aktualizujesz rekord lub usuwasz rekord z tabeli, wówczas wykonujesz transakcję na tej tabeli. Ważne jest kontrolowanie tych transakcji w celu zapewnienia integralności danych i obsługi błędów bazy danych.
Praktycznie, wykonamy wiele zapytań SQL dla grupy i wykonamy je wszystkie razem jako część transakcji.

Właściwości transakcji

Transakcje mają następujące cztery standardowe właściwości, zwykle określane skrótem ACID.
·      Atomowość - zapewnia pomyślne zakończenie wszystkich operacji w jednostce roboczej. W przeciwnym razie transakcja zostanie przerwana w momencie awarii, a wszystkie poprzednie operacje zostaną przywrócone do poprzedniego stanu.
·      Spójność - zapewnia, że ​​baza danych odpowiednio zmienia stany po pomyślnie zatwierdzonej transakcji.
·      Izolacja - umożliwia transakcjom niezależną i przejrzystą pracę.
·      Trwałość - zapewnia, że ​​wynik lub skutek zatwierdzonej transakcji będzie się utrzymywał w przypadku awarii systemu.

Kontrola transakcji

Następujące polecenia służą do kontrolowania transakcji.
·      COMMIT - aby zapisać zmiany.
·      ROLLBACK - aby cofnąć zmiany.
·      SAVEPOINT - tworzy punkty w grupach transakcji, w których ROLLBACK.
  • SET TRANSACTION - umieszcza nazwę transakcji.

Polecenia sterowania transakcyjnego

Transakcyjne polecenia sterujące są używane tylko z poleceniami DML, takimi jak: - INSERT, UPDATE i DELETE. Nie można ich używać podczas tworzenia tabel ani ich usuwania, ponieważ te operacje są automatycznie zatwierdzane w bazie danych.

Polecenie COMMIT

Polecenie COMMIT to transakcyjne polecenie używane do zapisywania zmian wywoływanych przez transakcję do bazy danych.
Polecenie COMMIT to transakcyjne polecenie używane do zapisywania zmian wywoływanych przez transakcję do bazy danych. Polecenie COMMIT zapisuje wszystkie transakcje do bazy danych od ostatniego polecenia COMMIT lub ROLLBACK.
Składnia polecenia COMMIT jest następująca.
COMMIT;
Przykład
Rozważ tabelę KLIENCI zawierającą następujące rekordy -
+----+----------+-----+-----------+----------+
 id,  nazwisko,    wiek, adres,        pensja
'1', 'Zawadzki',  '32', 'Warszawska', '2000.00'
'2', 'Kowalczyk', '25', 'Sokratesa',  '1500.00'
'3', 'Kot',       '23', 'Darwina',    '2000.00'
'4', 'Kowalska',  '25', 'Modlińska',  '6500.00'
'5', 'Sapal',     '27', 'Wspólna',    '8500.00'
'6', 'Nowak',     '22', 'Blizne',      NULL
'7', 'Makowska',  '24', 'Piaseczno',   NULL
+----+----------+-----+-----------+----------+
Poniżej znajduje się przykład, który usunie te rekordy z tabeli, które mają wiek = 25, a następnie COMMIT dokona zmiany w bazie danych.
SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> COMMIT;
W związku z tym dwa wiersze z tabeli zostaną usunięte, a instrukcja SELECT wygeneruje następujący wynik.
+----+----------+-----+-----------+----------+
 id, nazwisko,    wiek, adres,         pensja
'1', 'Zawadzki', '32',  'Warszawska', '2000.00'
'3', 'Kot',      '23',  'Darwina',    '2000.00'
'5', 'Sapal',    '27',  'Wspólna',    '8500.00'
'6', 'Nowak',    '22',  'Blizne',      NULL
'7', 'Makowska', '24',  'Piaseczno',   NULL
+----+----------+-----+-----------+----------+

Polecenie ROLLBACK

Polecenie ROLLBACK to transakcyjne polecenie używane do cofania transakcji, które nie zostały jeszcze zapisane w bazie danych. Ta komenda może być użyta tylko do cofnięcia transakcji od wydania ostatniego polecenia COMMIT lub ROLLBACK.
Składnia polecenia ROLLBACK wygląda następująco:
ROLLBACK;
Przykład
Rozważ tabelę KLIENCI zawierającą następujące rekordy -
+----+----------+-----+-----------+----------+
 id,  nazwisko,    wiek, adres,        pensja
'1', 'Zawadzki',  '32', 'Warszawska', '2000.00'
'2', 'Kowalczyk', '25', 'Sokratesa',  '1500.00'
'3', 'Kot',       '23', 'Darwina',    '2000.00'
'4', 'Kowalska',  '25', 'Modlińska',  '6500.00'
'5', 'Sapal',     '27', 'Wspólna',    '8500.00'
'6', 'Nowak',     '22', 'Blizne',      NULL
'7', 'Makowska',  '24', 'Piaseczno',   NULL
+----+----------+-----+-----------+----------+
Poniżej znajduje się przykład, który usunie te rekordy z tabeli, które mają wiek = 25, a następnie ROLLBACK zmiany w bazie danych.
SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> ROLLBACK;
Zatem operacja usuwania nie wpłynie na tabelę, a instrukcja SELECT wygeneruje następujący wynik.
+----+----------+-----+-----------+----------+
 id,  nazwisko,    wiek, adres,        pensja
'1', 'Zawadzki',  '32', 'Warszawska', '2000.00'
'2', 'Kowalczyk', '25', 'Sokratesa',  '1500.00'
'3', 'Kot',       '23', 'Darwina',    '2000.00'
'4', 'Kowalska',  '25', 'Modlińska',  '6500.00'
'5', 'Sapal',     '27', 'Wspólna',    '8500.00'
'6', 'Nowak',     '22', 'Blizne',      NULL
'7', 'Makowska',  '24', 'Piaseczno',   NULL
+----+----------+-----+-----------+----------+

Polecenie SAVEPOINT

SAVEPOINT jest punktem transakcji, kiedy możesz wycofać transakcję do określonego punktu bez cofania całej transakcji.
Składnia polecenia SAVEPOINT jest pokazana poniżej.
SAVEPOINT nazwa_punktu_zapisu;
To polecenie służy tylko utworzeniu SAVEPOINT spośród wszystkich transakcji transakcyjnych. Komenda ROLLBACK służy do cofnięcia grupy transakcji.
Składnia powrotu do SAVEPOINT jest pokazana poniżej.
ROLLBACK TO nazwa_punktu_zapisu;
Poniżej znajduje się przykład, w którym planujesz usunąć trzy różne rekordy z tabeli KLIENCI. Chcesz utworzyć SAVEPOINT przed każdym usunięciem, aby móc w dowolnym momencie ODWOŁAĆ się do dowolnego SAVEPOINT, aby przywrócić odpowiednie dane do oryginalnego stanu.
Przykład
Rozważ tabelę CUSTOMERS zawierającą następujące rekordy.
+----+----------+-----+-----------+----------+
 id,  nazwisko,    wiek, adres,        pensja
'1', 'Zawadzki',  '32', 'Warszawska', '2000.00'
'2', 'Kowalczyk', '25', 'Sokratesa',  '1500.00'
'3', 'Kot',       '23', 'Darwina',    '2000.00'
'4', 'Kowalska',  '25', 'Modlińska',  '6500.00'
'5', 'Sapal',     '27', 'Wspólna',    '8500.00'
'6', 'Nowak',     '22', 'Blizne',      NULL
'7', 'Makowska',  '24', 'Piaseczno',   NULL
+----+----------+-----+-----------+----------+

Poniższy blok kodu zawiera serię operacji.
SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM KLIENCI WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM KLIENCI WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM KLIENCI WHERE ID=3;
1 row deleted.
Teraz, gdy miały miejsce trzy usunięcia, załóżmy, że zmieniłeś zdanie i zdecydowałeś się wykonać ROLLBACK(ODWOŁAĆ) do SAVEPOINT, który zidentyfikowałeś jako SP2. Ponieważ punkt SP2 został utworzony po pierwszym usunięciu, dwa ostatnie usunięcia zostały cofnięte -
SQL> ROLLBACK TO SP2;
Rollback complete.
Zauważ, że nastąpiło tylko pierwsze usunięcie od czasu przywrócenia do SP2.
SQL> SELECT * FROM KLIENCI;
+----+----------+-----+-----------+----------+
 id,  nazwisko,    wiek, adres,        pensja
'2', 'Kowalczyk', '25', 'Sokratesa',  '1500.00'
'3', 'Kot',       '23', 'Darwina',    '2000.00'
'4', 'Kowalska',  '25', 'Modlińska',  '6500.00'
'5', 'Sapal',     '27', 'Wspólna',    '8500.00'
'6', 'Nowak',     '22', 'Blizne',      NULL
'7', 'Makowska',  '24', 'Piaseczno',   NULL
+----+----------+-----+-----------+----------+
6 rows selected.

Polecenie RELEASE SAVEPOINT

Polecenie RELEASE SAVEPOINT służy do usunięcia utworzonego SAVEPOINT.
Składnia polecenia RELEASE SAVEPOINT jest następująca.
RELEASE SAVEPOINT nazwa_punktu_zapisu;
Po zwolnieniu SAVEPOINT nie można już używać polecenia ROLLBACK w celu cofnięcia transakcji wykonanych od ostatniego SAVEPOINT.

Polecenie SET TRANSACTION

Komendy SET TRANSACTION można użyć do zainicjowania transakcji bazy danych. Ta komenda służy do określenia charakterystyki transakcji następującej po. Na przykład można określić transakcję, która ma być tylko do odczytu lub zapisu.
Składnia polecenia SET TRANSACTION jest następująca.
SET TRANSACTION [ READ WRITE | READ ONLY ];


Brak komentarzy:

Prześlij komentarz