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;