pl sql transactions commit
Dowiedz się o transakcjach PL SQL z przykładami instrukcji COMMIT, ROLLBACK i SAVEPOINTS:
W tym artykule będziemy kontynuować Seria PL / SQL . w Pakiet PL SQL samouczek, dowiedzieliśmy się o pakiecie, jego zaletach, specyfikacjach i strukturze.
Tutaj poznamy transakcje PL SQL i ich cechy. Omówimy niektóre instrukcje PL / SQL, takie jak COMMIT, ROLLBACK, SAVEPOINTS i tak dalej, które są powiązane z transakcjami PL SQL.
Dowiemy się również o instrukcjach LOCK TABLe i AUTOCOMMIT w języku PL SQL.
Zacznijmy od dyskusji !!
Czego się nauczysz:
Transakcje PL SQL
Niepodzielny składnik pracy w bazie danych, który zawiera wiele instrukcji SQL, nazywany jest transakcją. Nazywa się to atomowym, ponieważ gdy istnieją zmiany, na które mają wpływ instrukcje SQL, mogą one zostać zatwierdzone (nieokreślone aktualizacje bazy danych) lub wycofane (cofnij aktualizacje bazy danych).
Instrukcja SQL musi zostać zatwierdzona, w przeciwnym razie można ją wycofać, a wszystkie modyfikacje, które miała wykonać instrukcja SQL, pozostaną cofnięte. Jeśli program PL / SQL zostanie zatrzymany w trakcie transakcji, nie ma to wpływu na bazę danych i zostaje przywrócona do pierwotnego stanu.
COMMIT i ROLLBACK dbają o to, aby zmiany w bazie danych były albo wieczne, albo cofnięte. Instrukcja SAVEPOINT wskazuje na aktualną pozycję w przetwarzaniu transakcji.
Rozpocznij przetwarzanie transakcji
Każda transakcja ma początek i zakończenie.
Następujące zdarzenia oznaczają początek transakcji:
- Po połączeniu się z bazą danych wykonywana jest pierwsza instrukcja SQL.
- Nowa instrukcja SQL jest wykonywana po zakończeniu poprzedniej instrukcji SQL.
Zakończ przetwarzanie transakcji
Każdy program PL / SQL powinien mieć instrukcję COMMIT lub ROLLBACK. Tylko od logiki programowania zależy, czy po transakcji powinniśmy użyć COMMIT czy ROLLBACK.
Jeśli nie są używane instrukcje COMMIT lub ROLLBACK, ostateczny stan bazy danych zależy od środowiska hosta. Na przykład, w środowisku SQL * PLUS, jeśli blok kodu PL / SQL nie zawiera instrukcji COMMIT lub ROLLBACK, stan bazy danych będzie zależał od bloku kodu, który jest wykonywany zaraz po tym.
W środowisku Oracle, jeśli dołączymy instrukcję COMMIT lub wykonamy polecenie DISCONNECT, EXIT lub QUIT po uruchomieniu definicji danych lub zapytania sterującego danymi, transakcja zostanie zatwierdzona. Ponadto, jeśli dołączamy wyciąg ROLLBACK, transakcja jest cofnięta.
W ten sposób transakcja może zostać zakończona z powodu dowolnego z poniższych scenariuszy:
- Wykonywana jest instrukcja ROLLBACK lub COMMIT.
- Zapytanie DDL ( na przykład, instrukcja tworzenia tabeli) jest wykonywana, po czym COMMIT jest uruchamiany domyślnie.
- Zapytanie DCL ( na przykład, instrukcja GRANT), po czym polecenie COMMIT jest uruchamiane domyślnie.
- Użytkownik przerywa połączenie z bazą danych.
- Użytkownik uruchamia instrukcję EXIT, aby wyjść z SQL * PLUS, po czym domyślnie wykonywana jest instrukcja COMMIT.
- SQL * PLUS napotyka nietypowe zakończenie, po którym domyślnie wykonywana jest funkcja ROLLBACK.
- Zapytanie DML nie działa pomyślnie, po czym ROLLBACK jest domyślnie uruchamiane w celu przywrócenia bazy danych do jej pierwotnego stanu.
ZAANGAŻUJ W przypadku trwałych zmian
Instrukcja COMMIT jest w stanie zakończyć bieżącą transakcję i dokonać trwałej modyfikacji dokonanej przez transakcję. Po wykonaniu polecenia COMMIT możemy uzyskać zmodyfikowane dane.
Po uruchomieniu instrukcji COMMIT wszystkie wiersze tabeli, na które ma to wpływ, są zwalniane z blokad. Pomaga nam również pozbyć się SAVEPOINT. Poleceniu COMMIT może opcjonalnie towarzyszyć instrukcja WORK (COMMIT WORK), która jest dodawana tylko w celu poprawy czytelności kodu.
W przypadku niepowodzenia transakcji w momencie COMMIT i nieznanego stanu transakcji, w tym czasie tekst KOMENTARZA w kodzie PL / SQL jest przechowywany w słowniku danych wraz z identyfikatorem transakcji.
Składnia dla transakcji COMMIT:
COMMIT;
Rozważmy tabelę nazwaną NAUCZYCIELI.
Tabelę NAUCZYCIEL stworzyliśmy przy pomocy instrukcji SQL podanej poniżej:
jak dodać do tablicy java
CREATE TABLE TEACHERS ( CODE INT NOT NULL, SUBJECT VARCHAR (15) NOT NULL, NAME VARCHAR (15) NOT NULL, PRIMARY KEY (CODE) );
Wprowadź wartości do tej tabeli, a następnie zatwierdź transakcję w następujący sposób:
INSERT INTO TEACHERS VALUES (1, 'SELENIUM', 'TOM'); INSERT INTO TEACHERS VALUES (2, 'UFT', 'SAM'); INSERT INTO TEACHERS VALUES (3, 'JMETERE', 'TONK'); COMMIT;
Następnie wykonywane jest poniższe zapytanie:
SELECT * FROM TEACHERS;
Wynik:
ROLLBACK Aby cofnąć zmiany
Jeśli obecna transakcja zostanie zakończona poleceniem ROLLBACK, to cofnie wszystkie modyfikacje, które mają nastąpić w transakcji.
Instrukcja ROLLBACK ma następujące funkcje wymienione poniżej:
- Baza danych jest przywracana z pierwotnym stanem za pomocą instrukcji ROLLBACK na wypadek, gdyby omyłkowo usunęliśmy ważny wiersz z tabeli.
- W przypadku wyjątku, który doprowadził do niepowodzenia wykonania instrukcji SQL, instrukcja ROLLBACK umożliwia nam przejście do punktu początkowego programu, skąd możemy podjąć działania naprawcze.
- Aktualizacje wprowadzone do bazy danych bez instrukcji COMMIT można odwołać za pomocą instrukcji ROLLBACK.
Składnia transakcji ROLLBACK:
ROLLBACK;
Składnia transakcji ROLLBACK z SAVEPOINT:
ROLLBACK (TO SAVEPOINT );
Tutaj save_n to nazwa SAVEPOINT.
Rozważmy tabelę TEACHERS, którą stworzyliśmy wcześniej.
Implementacja kodu z ROLLBACK:
DELETE FROM TEACHERS WHERE CODE= 3; ROLLBACK;
Następnie wykonywane jest poniższe zapytanie:
SELECT * FROM TEACHERS;
Wynik powyższego kodu powinien wyglądać następująco:
W powyższym kodzie wykonaliśmy polecenie DELETE, które ma na celu usunięcie wpisu nauczyciela z CODE równym 3. Jednak ze względu na instrukcję ROLLBACK nie ma wpływu na bazę danych i nie następuje usunięcie.
SAVEPOINT do przywracania częściowych zmian
SAVEPOINT nadaje nazwę i identyfikację obecnemu punktowi przetwarzania transakcji. Zwykle jest powiązany z instrukcją ROLLBACK. Umożliwia nam cofnięcie niektórych sekcji transakcji bez dotykania całej transakcji.
Kiedy zastosujemy ROLLBACK do SAVEPOINT, wszystkie SAVEPOINTS zawarte po tym konkretnym SAVEPOINT zostaną usunięte (to znaczy, jeśli zaznaczyliśmy trzy SAVEPOINTS i zastosowaliśmy ROLLBACK na drugim SAVEPOINT, automatycznie trzeci SAVEPOINT zostanie usunięty.)
Instrukcja COMMIT lub ROLLBACK usuwa wszystkie SAVEPOINTS. Nazwy nadane SAVEPOINT są niezadeklarowanymi identyfikatorami i mogą być wielokrotnie stosowane w ramach transakcji. Następuje przesunięcie SAVEPOINT ze starej do bieżącej pozycji wewnątrz transakcji.
ROLLBACK zastosowany do SAVEPOINT wpływa tylko na trwającą część transakcji. W ten sposób SAVEPOINT pomaga podzielić długotrwałą transakcję na małe sekcje poprzez pozycjonowanie punktów weryfikacji.
Składnia transakcji SAVEPOINT:
SAVEPOINT ;
Tutaj, save_n to nazwa SAVEPOINT.
Rozważmy ponownie tabelę TEACHERS, którą stworzyliśmy wcześniej.
Implementacja kodu ROLLBACK Z SAVEPOINT:
INSERT INTO TEACHERS VALUES (4, 'CYPRESS', 'MICHEAL'); SAVEPOINT s; INSERT INTO TEACHERS VALUES (5, 'PYTHON', 'STEVE'); INSERT INTO TEACHERS VALUES (6, 'PYTEST', 'ARNOLD'); ROLLBACK TO s; INSERT INTO TEACHERS VALUES (7, 'PROTRACTOR', 'FANNY'); COMMIT;
Następnie wykonywane jest poniższe zapytanie:
SELECT * FROM TEACHERS;
Wynik powyższego kodu powinien wyglądać następująco:
W powyższym kodzie, po ROLLBACK z SAVEPOINT s zastosowano, wstawiono tylko dwa kolejne wiersze, tj. nauczyciele z odpowiednio KODEM 4 i 7. Uwaga: nauczyciele z kodami 1, 2 i 3 zostali dodani podczas tworzenia tabeli.
LOCK TABELA W PL / SQL
Instrukcja LOCK w PL / SQL umożliwia zablokowanie pełnej bazy danych w trybie blokowania. To określa, czy chcemy udostępniać tabelę, czy nie.
Weźmy przykład tabeli zamków:
LOCK TABLE teachers IN ROW SHARE MODE NOWAIT;
Powyższe zapytanie blokuje tabelę TEACHERS w trybie współdzielenia wierszy. Tryb współużytkowania wierszy umożliwia równoczesne użycie tabeli. Nie pozwala użytkownikom na zablokowanie pełnego stołu do indywidualnego użytku. Po wykonaniu polecenia COMMIT lub ROLLBACK blokady tabeli są zwalniane. Słowo kluczowe NOWAIT jest używane, aby wspomnieć, że baza danych nie może czekać na zwolnienie blokady.
Tryb blokady jest ważny, aby stwierdzić, jakie inne blokady można zastosować do tabeli.
Omówmy niektóre tryby LOCK dostępne w PL / SQL:
Sl. Nie | TRYB BLOKADY | CEL, POWÓD |
---|---|---|
1 | UDZIAŁ WIERSZY | Umożliwia jednoczesne korzystanie ze stołu przez wielu użytkowników. Jednak użytkownicy nie mogą blokować całej tabeli do wyłącznego użytku. |
dwa | WYŁĄCZNIE WIERSZ | Umożliwia jednoczesne korzystanie ze stołu przez wielu użytkowników. Jednak użytkownicy nie mogą blokować całej tabeli do wyłącznego użytku w trybie współdzielenia. |
3 | UDOSTĘPNIJ AKTUALIZACJĘ | Umożliwia jednoczesne korzystanie ze stołu przez wielu użytkowników. Jednak użytkownicy nie mogą blokować całej tabeli do wyłącznego użytku. |
4 | DZIELIĆ | Pozwala nam na jednoczesne wykonywanie wielu zapytań na stole. Jednak użytkownicy nie mogą modyfikować zablokowanej tabeli. |
5 | UDOSTĘPNIJ WIERSZ WYŁĄCZNIE | Umożliwia użytkownikom z dostępem tylko do odczytu do tabeli. Nie mogą modyfikować tabeli ani blokować tabeli w trybie udostępniania. |
6 | EKSKLUZYWNY | Pozwala tylko na wykonywanie zapytań na zablokowanej tabeli. |
Automatyczna kontrola transakcji w PL / SQL
Możemy wykonać taką konfigurację, aby instrukcja COMMIT była wykonywana domyślnie za każdym razem, gdy zostanie uruchomiona instrukcja INSERT lub DELETE. Odbywa się to poprzez ustawienie zmiennej środowiskowej AUTOCOMMIT na ON.
Składnia:
SET AUTOCOMMIT ON;
Ponownie, można to wyłączyć, ustawiając zmienną środowiskową AUTOCOMMIT na OFF.
Składnia:
SET AUTOCOMMIT OFF;
Często zadawane pytania i odpowiedzi
Q # 1) Jaka jest transakcja w PL SQL?
Odpowiedź: Transakcja to grupa instrukcji obliczania danych SQL, które działają jako niepodzielna jednostka. Wszystkie transakcje mają charakter atomowy, które są albo zatwierdzane, albo wycofywane.
Pytanie 2) Co to jest COMMIT w PL SQL?
Odpowiedź: Instrukcja COMMIT służy do trwałej zmiany w bazie danych przez bieżącą transakcję. Powoduje, że modyfikacja bazy danych jest widoczna dla użytkowników.
P # 3) Jak zakończyć transakcję?
Odpowiedź: Transakcja kończy się jawnie instrukcją COMMIT lub ROLLBACK. Można go również zakończyć bezwarunkowo po uruchomieniu instrukcji DML.
Q # 4) Czy możemy zatwierdzić wyzwalacz?
Odpowiedź: Tak, możemy zatwierdzić wyzwalacz tylko wtedy, gdy ta transakcja wyzwalająca jest niezależna od transakcji nadrzędnej.
P # 5) Czy WYBIERZ transakcję?
różnica między planem testów a strategią testów
Odpowiedź: Tak, SELECT to transakcja mająca wszystkie cechy transakcji.
P # 6) Jak wycofać transakcję w Oracle?
Odpowiedź: Musimy uruchomić instrukcję ROLLBACK, aby wycofać transakcję w Oracle. Cofa wszystkie zmiany dokonane przez transakcję w bazie danych i zostaje przywrócony do pierwotnego stanu.
Wniosek
W tym samouczku szczegółowo omówiliśmy kilka podstawowych pojęć dotyczących transakcji w języku PL SQL, które są niezbędne do zarządzania transakcjami w języku PL SQL. Omówiliśmy następujące tematy wymienione poniżej:
- Transakcja.
- Stosowanie COMMIT w transakcji.
- Co to jest ROLLBACK w transakcji?
- Korzystanie z ROLLBACK z SAVEPOINT w transakcji.
- Tabela LOCK.
rekomendowane lektury
- Samouczek języka PL SQL dla początkujących z przykładami | Co to jest PL / SQL
- Tworzenie aplikacji bazodanowych Oracle: Oracle SQL i PL / SQL
- Pakiet PL SQL: Samouczek dotyczący pakietu Oracle PL / SQL z przykładami
- Różnica między SQL a MySQL i SQL Server (z przykładami)
- PL SQL Datetime Format: Funkcje daty i czasu w PL / SQL
- Kompletny przewodnik po obsłudze wyjątków PL SQL z przykładami
- SQL vs NoSQL Dokładne różnice i wiedzieć, kiedy używać NoSQL i SQL
- Samouczek dotyczący bazy danych Oracle - co to jest baza danych Oracle?