W Structured Query Language, TCL to skrót od Transaction Control Language. Pojedyncza jednostka pracy w bazie danych jest tworzona po wykonaniu kolejnych poleceń, co jest znane jako transakcja.
Istnieje kilka poleceń w Structured Query Language, a polecenie Transaction Control Language jest jednym z poleceń SQL. Polecenia TCL obsługują transakcje w bazie danych
W Structured Query Language, Commit, Rollback i Savepoint to polecenia języka kontroli transakcji szeroko stosowane w SQL.
Teraz zrozummy i dowiedzmy się, jak polecenia języka kontroli transakcji działają w języku zapytań strukturalnych za pomocą kilku przykładów. Polecenia języka kontroli transakcji to:
- Polecenie ZATWIERDZ
- Polecenie WYCOFANIA
- Polecenie ZAPISZ PUNKT
Polecenie ZATWIERDZ
Commit Command w SQL służy do zapisywania na dysku wszystkich transakcji, które zmieniają się na stałe. Za każdym razem, gdy wykonujemy operację na poleceniach języka definicji danych (DDL), takich jak polecenie INSERT, polecenie UPDATE i polecenie DELETE, wszelkie modyfikacje wprowadzone przez te polecenia są trwałe, ale przed zamknięciem bieżącej sesji lub do końca sesji. Możemy łatwo cofnąć operację, którą wykonaliśmy za pomocą języka definicji danych, zanim sesja zostanie zamknięta. Polecenie Zatwierdź służy do trwałego zapisania modyfikacji w pamięci bez kończenia sesji.
Składnia:
COMMIT;
Jeśli masz w systemie istniejącą bazę danych, użyj tej istniejącej bazy danych lub utwórz nową bazę danych. Użyjemy istniejącej bazy danych firmy.
USE Company
Weź pod uwagę już istniejące tabele pracowników, które zawierają określone dane:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | WYROCZNIA | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | WYROCZNIA | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | TESTOWANIE | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
W SQL zapytanie START TRANSACTION jest używane do rozpoczęcia transakcji.
START TRANSACTION;
Teraz wstawimy dwa rekordy do istniejącej tabeli Pracownicy. Aby wstawić wiele rekordów, użyjemy poniższego oświadczenia:
INSERT INTO EMPLOYEES (EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY, DEPARTMENT, MANAGERID) VALUES (4002, 'ASHWINI', 'BAGHAT', 54500, 'JAIPUR', 'JAVA', 3), (4003, 'PURVA', 'DHANDEKAR', 57000, 'PUNE', 'TESTING', 4);
Użyjemy teraz zapytania SELECT, aby zweryfikować, czy rekordy zostały pomyślnie wstawione do tabeli.
SELECT * FROM EMPLOYEES;
Wyjście powyższego zapytania:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | WYROCZNIA | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | WYROCZNIA | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | TESTOWANIE | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
4002 | ASHWINI | TORBA | 54500 | JAIPUR | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | TESTOWANIE | 4 |
Dane wyjściowe pokazują, że wszystkie rekordy zostały wstawione pomyślnie.
Aby zapisać operację INSERT w tabeli Employees, wykonamy polecenie COMMIT.
COMMIT;
W SQL domyślnie włączone jest automatyczne zatwierdzanie. Aby wyłączyć automatyczne zatwierdzanie w SQL, ustaw wartość automatycznego zatwierdzania na 0.
Zaktualizujemy identyfikator pracownika 4002 i ustawimy miasto jako 'Noida. Użyj poniższego zapytania, aby zaktualizować rekord pracownika.
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;
Użyjemy teraz zapytania SELECT, aby zweryfikować, czy rekord został pomyślnie zaktualizowany w tabeli.
SELECT * FROM EMPLOYEES;
Wyjście powyższego zapytania:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | WYROCZNIA | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | WYROCZNIA | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | TESTOWANIE | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | TESTOWANIE | 4 |
Jak widać w danych wyjściowych, miasto o identyfikatorze pracownika 4002 zostało zmodyfikowane.
Aby zapisać zmiany w tabeli pracowników, napiszemy polecenie COMMIT.
COMMIT;
Teraz usuniemy identyfikator pracownika 4003 z tabeli Pracownicy. Użyj poniższego zapytania, aby usunąć rekord pracownika.
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;
Użyjemy teraz zapytania SELECT, aby sprawdzić, czy rekord został pomyślnie usunięty z tabeli.
SELECT * FROM EMPLOYEES;
Wyjście powyższego zapytania:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | WYROCZNIA | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | WYROCZNIA | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | TESTOWANIE | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
Dane wyjściowe potwierdzają, że usunęliśmy dane 4003 identyfikatora pracownika.
Aby zapisać zmiany w tabeli pracowników, napiszemy polecenie COMMIT.
COMMIT;
Polecenie ZAPISZ PUNKT
Wykonywane operacje na bazie danych można podzielić na dwie części. Rozważmy na przykład wszystkie wykonane przez nas instrukcje usuwania jako jeden segment transakcji, a instrukcję aktualizacji jako jeden segment transakcji. Aby zapisać zapytania insert w części insert i usunąć zapytania w części delete tej samej transakcji, używamy polecenia SAVEPOINT w SQL. Załóżmy, że chcemy zapisać wszystkie zapytania związane z usuwaniem za pomocą punktu zapisu o nazwie delete. Aby zapisać wszystkie operacje związane z usuwaniem w jednym punkcie zapisu, po wykonaniu zapytania usuwającego musimy wykonać komendę SAVEPOINT, a następnie nazwę punktu zapisu.
Składnia:
SAVEPOINT savepoint name;
Polecenie COFNIĘCIE
Realizując transakcję, zbudowaliśmy savepointy, aby zapisać różne segmenty transakcji. W miarę zmiany wymagań Użytkownika, Użytkownik może cofnąć transakcję w różnych punktach zapisu. Rozważmy scenariusz:Zainicjowaliśmy transakcję, po której nastąpiło utworzenie tabeli i wstawienie rekordu do tabeli. Nazwany punkt zapisu INS zbudowaliśmy po dodaniu rekordów do tabeli. Po wstawieniu wykonaliśmy operację usunięcia, a później przypomnieliśmy sobie, że przez pomyłkę usunęliśmy błędne rekordy. Cofniemy naszą transakcję, aby dotrzeć do punktu zapisu INS. Aby cofnąć transakcję, użyj polecenia ROLLBACK.
Możemy cofnąć operację, którą wykonaliśmy lub cofnąć całą transakcję w punkcie zapisu.
Składnia przywracania operacji:
ROLLBACK;
Składnia do wycofania transakcji:
ROLLBACK TO savepoint;
Przykłady poleceń SAVEPOINT i ROLLBACK:
Jeśli masz w systemie istniejącą bazę danych, użyj tej istniejącej bazy danych lub utwórz nową bazę danych. Wybierzemy istniejącą już bazę danych o nazwie Firma.
USE Company
Rozważ istniejące tabele pracowników, które zawierają następujące zapisy:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | WYROCZNIA | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | WYROCZNIA | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | TESTOWANIE | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
W SQL zapytanie START TRANSACTION jest używane do rozpoczęcia transakcji.
START TRANSACTION;
Teraz wstawimy dwa rekordy do istniejącej tabeli Pracownicy. Aby wstawić wiele rekordów, użyjemy poniższego oświadczenia:
INSERT INTO EMPLOYEES (EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY, DEPARTMENT, MANAGERID) VALUES (4003, 'PURVA', 'DHANDEKAR', 57000, 'PUNE', 'TESTING', 4), (5001, 'ASHWIN', 'PATEL', 54500, 'JAIPUR', 'JAVA', 3);
Użyjemy teraz zapytania SELECT, aby zweryfikować, czy rekordy zostały pomyślnie wstawione do tabeli.
SELECT * FROM EMPLOYEES;
Wyjście powyższego zapytania:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | WYROCZNIA | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | WYROCZNIA | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | TESTOWANIE | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | TESTOWANIE | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Jak wszyscy wiemy, polecenie SAVEPOINT w SQL służy do zapisywania różnych części tej samej transakcji. Załóżmy, że Insertion to jeden z segmentów naszej transakcji. Użyj punktu zapisu, aby zapisać ten segment wstawiania jako wstawianie.
SAVEPOINT Insertion;
Teraz wykonamy operację UPDATE w tabelach Employee i zaktualizujemy wynagrodzenie pracownika o 1,2 dla identyfikatora pracownika 2003.
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;
Sprawdzimy krzyżowo operację aktualizacji, wykonując zapytanie SELECT w tabeli Pracownicy:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
2003 | RUCHIKA | JAIN | 60000 | MUMBAJ | TESTOWANIE | 4 |
Powyższe wyniki zapytania pokazują, że rekord identyfikatora pracownika 2003 został pomyślnie zaktualizowany.
Rozważ zapytanie o aktualizację jako jeden z segmentów naszej transakcji. Zapiszemy część operacji aktualizacji za pomocą SAVEPOINT o nazwie Aktualizacja.
SAVEPOINT Updation;
Teraz wykonamy operację usuwania na tabeli Pracownicy. Wykonamy operację usuwania na tabeli pracowników, w której wynagrodzenie pracownika jest większe niż 60000.
DELETE FROM EMPLOYEES WHERE SALARY > 60000;
Sprawdzimy krzyżowo operację usuwania, wykonując zapytanie SELECT w tabeli Pracownicy:
SELECT * FROM EMPLOYEES;
Wyjście powyższego zapytania:
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | WYROCZNIA | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
2003 | RUCHIKA | JAIN | 60000 | MUMBAJ | TESTOWANIE | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | TESTOWANIE | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Powyższe zapytanie pokazuje, że usunięcie rekordów pracowników powiodło się.
Rozważ zapytania dotyczące usuwania jako jeden segment naszej transakcji. Zapiszemy część operacji aktualizacji za pomocą SAVEPOINT o nazwie Usuwanie.
SAVEPOINT Deletion;
Nagle Użytkownik zdał sobie sprawę, że zapytanie, które chcieliśmy wykonać podczas operacji usuwania, nie powinno być tym zapytaniem. W takiej sytuacji użytkownicy powrócą do całej transakcji do SAVEPOINT; Użytkownik może cofnąć się do dowolnego PUNKTÓW ZAPISU, które chce przywrócić, np. Wstawianie, Aktualizacja PUNKT ZAPIS.
ROLLBACK TO Insertion;
Jeśli użytkownik nie chce usunąć rekordów. W związku z tym użytkownik zostanie cofnięty do punktu zapisu wstawiania.
Aby sprawdzić, czy mamy tę samą tabelę pracowników, którą mieliśmy przed wykonaniem operacji aktualizacji i usunięcia. Aby pobrać dane pracowników, wykonaj operację WYBIERZ na tabeli pracowników.
SELECT * FROM EMPLOYEES;
ID PRACOWNIKA | FIRST_NAME | LAST_NAME | WYNAGRODZENIE | MIASTO | DZIAŁ | IDENTYFIKATOR KIEROWCY |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | WYROCZNIA | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | WYROCZNIA | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACI | SHARMA | 55500 | CZANDIGAR | WYROCZNIA | 1 |
2002 | PRZYJMUJ SIĘ | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAJ | TESTOWANIE | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAJ | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAJ | TESTOWANIE | 4 |
4002 | ASHWINI | TORBA | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | TESTOWANIE | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |