PL / SQL - transakcje

W tym rozdziale omówimy transakcje w PL / SQL. Baza danychtransactionto niepodzielna jednostka pracy, która może składać się z jednej lub więcej powiązanych instrukcji SQL. Nazywa się to niepodzielną, ponieważ modyfikacje bazy danych wywołane przez instrukcje SQL, które stanowią transakcję, mogą być zbiorczo zatwierdzone, tj. Na stałe w bazie danych lub wycofane (cofnięte) z bazy danych.

Pomyślnie wykonana instrukcja SQL i zatwierdzona transakcja to nie to samo. Nawet jeśli instrukcja SQL zostanie wykonana pomyślnie, chyba że transakcja zawierająca instrukcję zostanie zatwierdzona, można ją wycofać, a wszystkie zmiany wprowadzone przez instrukcję (y) można cofnąć.

Rozpoczęcie i zakończenie transakcji

Transakcja ma rozszerzenie beginning i end. Transakcja rozpoczyna się, gdy ma miejsce jedno z następujących zdarzeń -

  • Pierwsza instrukcja SQL jest wykonywana po połączeniu się z bazą danych.

  • Przy każdej nowej instrukcji SQL wydanej po zakończeniu transakcji.

Transakcja kończy się, gdy ma miejsce jedno z następujących zdarzeń -

  • ZA COMMIT lub a ROLLBACK wydano oświadczenie.

  • ZA DDL oświadczenie, takie jak CREATE TABLEwydano oświadczenie; ponieważ w tym przypadku COMMIT jest wykonywany automatycznie.

  • ZA DCL oświadczenie, takie jak GRANTwydano oświadczenie; ponieważ w tym przypadku COMMIT jest wykonywany automatycznie.

  • Użytkownik rozłącza się z bazą danych.

  • Użytkownik wychodzi z SQL*PLUS wydając EXIT polecenie, polecenie COMMIT jest wykonywane automatycznie.

  • SQL * Plus kończy działanie nieprawidłowo, a ROLLBACK jest wykonywana automatycznie.

  • ZA DMLinstrukcja kończy się niepowodzeniem; w takim przypadku ROLLBACK jest wykonywana automatycznie w celu cofnięcia tej instrukcji DML.

Zatwierdzenie transakcji

Transakcja jest trwała przez wydanie polecenia SQL COMMIT. Ogólna składnia polecenia COMMIT to -

COMMIT;

Na przykład,

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (6, 'Komal', 22, 'MP', 4500.00 ); 

COMMIT;

Wycofywanie transakcji

Zmiany wprowadzone w bazie danych bez polecenia COMMIT można cofnąć za pomocą polecenia ROLLBACK.

Ogólna składnia polecenia ROLLBACK to -

ROLLBACK [TO SAVEPOINT < savepoint_name>];

Kiedy transakcja zostaje przerwana z powodu jakiejś bezprecedensowej sytuacji, takiej jak awaria systemu, cała transakcja od momentu zatwierdzenia jest automatycznie wycofywana. Jeśli nie używaszsavepoint, a następnie użyj poniższej instrukcji, aby cofnąć wszystkie zmiany -

ROLLBACK;

Savepoints

Savepoints to rodzaj znaczników, które pomagają w podzieleniu długiej transakcji na mniejsze jednostki poprzez ustawienie niektórych punktów kontrolnych. Ustawiając punkty zapisu w ramach długiej transakcji, możesz w razie potrzeby cofnąć się do punktu kontrolnego. Odbywa się to poprzez wydanieSAVEPOINT Komenda.

Ogólna składnia polecenia SAVEPOINT to -

SAVEPOINT < savepoint_name >;

Na przykład

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (7, 'Rajnish', 27, 'HP', 9500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (8, 'Riddhi', 21, 'WB', 4500.00 ); 
SAVEPOINT sav1;
  
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000; 
ROLLBACK TO sav1;
  
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000 
WHERE ID = 7; 
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000 
WHERE ID = 8; 

COMMIT;

ROLLBACK TO sav1 - Ta instrukcja cofa wszystkie zmiany do momentu, w którym zaznaczyłeś punkt zapisu sav1.

Następnie rozpoczną się nowe zmiany, które wprowadzisz.

Automatyczna kontrola transakcji

Aby wykonać COMMIT automatycznie, gdy plik INSERT, UPDATE lub DELETE jest wykonywane, możesz ustawić AUTOCOMMIT zmienna środowiskowa jako -

SET AUTOCOMMIT ON;

Możesz wyłączyć tryb automatycznego zatwierdzania za pomocą następującego polecenia -

SET AUTOCOMMIT OFF;