SQL - transakcje

Transakcja to jednostka pracy wykonywana na bazie danych. Transakcje to jednostki lub sekwencje pracy wykonane w logicznej kolejności, czy to ręcznie przez użytkownika, czy automatycznie przez jakiś program bazodanowy.

Transakcja to propagacja jednej lub więcej zmian w bazie danych. Na przykład, jeśli tworzysz rekord lub aktualizujesz rekord lub usuwasz rekord z tabeli, to wykonujesz transakcję na tej tabeli. Kontrolowanie tych transakcji jest ważne, aby zapewnić integralność danych i obsługiwać błędy bazy danych.

W praktyce wiele zapytań SQL połączysz w grupę i wykonasz wszystkie razem jako część transakcji.

Właściwości transakcji

Transakcje mają następujące cztery standardowe właściwości, zwykle określane akronimem ACID.

  • Atomicity- zapewnia pomyślne zakończenie wszystkich operacji w jednostce pracy. W przeciwnym razie transakcja jest przerywana w momencie niepowodzenia, a wszystkie poprzednie operacje są przywracane do poprzedniego stanu.

  • Consistency - zapewnia, że ​​baza danych prawidłowo zmienia stany po pomyślnym zatwierdzeniu transakcji.

  • Isolation - umożliwia niezależne i przejrzyste transakcje transakcji.

  • Durability - zapewnia, że ​​wynik lub skutek zatwierdzonej transakcji będzie trwał w przypadku awarii systemu.

Kontrola transakcji

Poniższe polecenia służą do sterowania transakcjami.

  • COMMIT - aby zapisać zmiany.

  • ROLLBACK - cofnąć zmiany.

  • SAVEPOINT - tworzy punkty w ramach grup transakcji, w których można ROLLBACK.

  • SET TRANSACTION - Umieszcza nazwisko na transakcji.

Polecenia kontroli transakcji

Polecenia sterujące transakcjami są używane tylko z DML Commandstakie jak - tylko INSERT, UPDATE i DELETE. Nie można ich używać podczas tworzenia tabel lub usuwania ich, ponieważ te operacje są automatycznie zatwierdzane w bazie danych.

Polecenie COMMIT

Polecenie COMMIT jest poleceniem transakcyjnym używanym do zapisywania zmian wywołanych przez transakcję w bazie danych.

Polecenie COMMIT jest poleceniem transakcyjnym używanym do zapisywania zmian wywołanych przez transakcję w bazie danych. Polecenie COMMIT zapisuje wszystkie transakcje w bazie danych od ostatniego polecenia COMMIT lub ROLLBACK.

Składnia polecenia COMMIT jest następująca.

COMMIT;

Example

Rozważ tabelę CUSTOMERS zawierającą następujące rekordy -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Poniżej znajduje się przykład, który usuwa te rekordy z tabeli, które mają wiek = 25, a następnie ZATWIERDZA zmiany w bazie danych.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> COMMIT;

W ten sposób dwa wiersze z tabeli zostałyby usunięte, a instrukcja SELECT dałaby następujący wynik.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Polecenie ROLLBACK

Polecenie ROLLBACK jest poleceniem transakcyjnym używanym do cofania transakcji, które nie zostały jeszcze zapisane w bazie danych. Tego polecenia można używać tylko do cofania transakcji od czasu wydania ostatniego polecenia COMMIT lub ROLLBACK.

Składnia polecenia ROLLBACK jest następująca:

ROLLBACK;

Example

Rozważ tabelę CUSTOMERS zawierającą następujące rekordy -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Poniżej znajduje się przykład, który spowodowałby usunięcie tych rekordów z tabeli, które mają wiek = 25, a następnie Cofnięcie zmian w bazie danych.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> ROLLBACK;

W związku z tym operacja usuwania nie wpłynie na tabelę, a instrukcja SELECT dałaby następujący wynik.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Polecenie SAVEPOINT

SAVEPOINT to punkt w transakcji, w którym można cofnąć transakcję do określonego punktu bez cofania całej transakcji.

Składnia polecenia SAVEPOINT jest przedstawiona poniżej.

SAVEPOINT SAVEPOINT_NAME;

To polecenie służy tylko do tworzenia SAVEPOINT wśród wszystkich instrukcji transakcyjnych. Polecenie ROLLBACK służy do cofania grupy transakcji.

Składnia przywracania do SAVEPOINT jest pokazana poniżej.

ROLLBACK TO SAVEPOINT_NAME;

Poniżej znajduje się przykład, w którym planujesz usunąć trzy różne rekordy z tabeli CUSTOMERS. Chcesz utworzyć SAVEPOINT przed każdym usunięciem, aby w dowolnym momencie móc ROLLBACK do dowolnego SAVEPOINT, aby przywrócić odpowiednie dane do ich pierwotnego stanu.

Example

Rozważ tabelę CUSTOMERS zawierającą następujące rekordy.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Poniższy blok kodu zawiera serię operacji.

SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

Teraz, po usunięciu trzech elementów, załóżmy, że zmieniłeś zdanie i zdecydowałeś się ROLLBACK do SAVEPOINT, który zidentyfikowałeś jako SP2. Ponieważ dodatek SP2 został utworzony po pierwszym usunięciu, ostatnie dwa usunięcia są cofane -

SQL> ROLLBACK TO SP2;
Rollback complete.

Zauważ, że tylko pierwsze usunięcie miało miejsce od czasu przywrócenia dodatku SP2.

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.

Polecenie RELEASE SAVEPOINT

Polecenie RELEASE SAVEPOINT służy do usuwania utworzonego SAVEPOINT.

Składnia komendy RELEASE SAVEPOINT jest następująca.

RELEASE SAVEPOINT SAVEPOINT_NAME;

Po zwolnieniu SAVEPOINT nie można już używać komendy ROLLBACK do cofania transakcji wykonanych od ostatniego SAVEPOINT.

Polecenie SET TRANSACTION

Do zainicjowania transakcji bazy danych można użyć polecenia SET TRANSACTION. To polecenie służy do określania cech transakcji, która następuje. Na przykład można określić transakcję jako tylko do odczytu lub do odczytu i zapisu.

Składnia polecenia SET TRANSACTION jest następująca.

SET TRANSACTION [ READ WRITE | READ ONLY ];