V Structured Query Language je TCL zkratkou pro jazyk řízení transakcí. Jedna jednotka práce v databázi se vytvoří po následném provedení příkazů, které se nazývá transakce.
V jazyce Structured Query Language jsou některé příkazy a příkaz jazyka řízení transakcí je jedním z příkazů SQL. Příkazy TCL zpracovávají transakce v databázi
V jazyce Structured Query Language jsou příkazy Commit, Rollback a Savepoint v SQL široce používané příkazy Transaction Control Language.
Nyní pomocí několika příkladů pochopíme a naučíme se, jak fungují příkazy jazyka řízení transakcí v jazyce strukturovaných dotazů. Příkazy jazyka řízení transakcí jsou:
- Příkaz COMMIT
- Příkaz ROLLBACK
- Příkaz SAVEPOINT
Příkaz COMMIT
Příkaz Commit v SQL se používá k uložení všech transakcí, které se trvale změní, na disk. Kdykoli provádíme operaci s příkazy Data Definition Language (DDL), jako je příkaz INSERT, příkaz UPDATE a příkaz DELETE, jakékoli úpravy provedené těmito příkazy jsou trvalé, ale před uzavřením aktuální relace nebo do konce relace. Operaci, kterou jsme provedli pomocí jazyka Data Definition Language, můžeme snadno vrátit zpět, než se relace vypne. Příkaz Commit se používá k trvalému uložení modifikace do úložiště bez ukončení relace.
Syntaxe:
COMMIT;
Pokud máte v systému existující databázi, použijte tuto existující databázi nebo vytvořte novou databázi. Využijeme stávající databázi Společnost.
USE Company
Zvažte již existující tabulky zaměstnanců, které obsahují určitá data:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
1001 | VAIBHAVI | MISHRA | 65 000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | TESTOVÁNÍ | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 |
V SQL se k zahájení transakce používá dotaz START TRANSACTION.
START TRANSACTION;
Nyní vložíme dva záznamy do existující tabulky Zaměstnanci. Pro vložení více záznamů použijeme následující příkaz:
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);
Nyní pomocí dotazu SELECT ověříme, zda jsou záznamy do tabulky vloženy úspěšně či nikoli.
SELECT * FROM EMPLOYEES;
Výstup pro výše uvedený dotaz:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
1001 | VAIBHAVI | MISHRA | 65 000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | TESTOVÁNÍ | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | JAIPUR | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57 000 | PUNE | TESTOVÁNÍ | 4 |
Výstup ukazuje, že všechny záznamy byly úspěšně vloženy.
Chcete-li uložit operaci INSERT do tabulky Zaměstnanci, provedeme příkaz COMMIT.
COMMIT;
V SQL je ve výchozím nastavení zapnuto automatické potvrzení. Chcete-li vypnout automatické potvrzení v SQL, nastavte hodnotu automatického potvrzení na 0.
Aktualizujeme id zaměstnance 4002 a nastavíme město jako 'Noida. Pomocí níže uvedeného dotazu aktualizujte záznam zaměstnance.
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;
Nyní pomocí dotazu SELECT ověříme, zda je záznam v tabulce úspěšně aktualizován nebo ne.
SELECT * FROM EMPLOYEES;
Výstup pro výše uvedený dotaz:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
1001 | VAIBHAVI | MISHRA | 65 000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | TESTOVÁNÍ | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57 000 | PUNE | TESTOVÁNÍ | 4 |
Jak můžeme vidět na výstupu, zaměstnanec Id 4002 city byl upraven.
Pro uložení změn na stole zaměstnanců napíšeme příkaz COMMIT.
COMMIT;
Nyní odstraníme id zaměstnance 4003 z tabulky Zaměstnanci. Pomocí níže uvedeného dotazu smažte záznam zaměstnance.
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;
Nyní pomocí dotazu SELECT ověříme, zda je záznam v tabulce úspěšně smazán či nikoli.
SELECT * FROM EMPLOYEES;
Výstup pro výše uvedený dotaz:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
1001 | VAIBHAVI | MISHRA | 65 000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | TESTOVÁNÍ | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
Výstup potvrzuje, že jsme odstranili podrobnosti s ID zaměstnance 4003.
Pro uložení změn na stole zaměstnanců napíšeme příkaz COMMIT.
COMMIT;
Příkaz SAVEPOINT
Prováděné databázové operace lze rozdělit do dvou částí. Například všechny příkazy odstranění, které jsme provedli, považujte za jeden segment transakce a příkaz aktualizace za jeden segment transakce. Pro uložení vkládacích dotazů do vkládací části a mazání dotazů do odstraňovací části stejné transakce používáme příkaz SAVEPOINT v SQL. Předpokládejme, že chceme uložit všechny dotazy související s odstraněním pomocí bodu uložení s názvem delete. Chcete-li uložit všechny operace související s odstraněním do jednoho bodu uložení, musíme po provedení dotazu na odstranění provést příkaz SAVEPOINT následovaný názvem bodu uložení.
Syntaxe:
SAVEPOINT savepoint name;
Příkaz ROLLBACK
Při provádění transakce jsme vytvořili body uložení pro uložení různých segmentů transakce. Jak se mění požadavky uživatele, může uživatel vrátit zpět transakci do různých bodů uložení. Zvažte scénář:Zahájili jsme transakci následovanou vytvořením tabulky a vložením záznamu do tabulky. Po přidání záznamů do tabulky jsme vytvořili INS s názvem savepoint. Po vložení jsme provedli operaci odstranění a později jsme si vzpomněli, že jsme omylem smazali nesprávné záznamy. Zrušíme naši transakci, abychom dosáhli bodu uložení INS. Chcete-li transakci vrátit zpět, použijte příkaz ROLLBACK.
Můžeme vrátit zpět operaci, kterou jsme provedli, nebo vrátit zpět celou transakci bodu uložení.
Syntaxe pro vrácení operace:
ROLLBACK;
Syntaxe pro vrácení zpět transakce:
ROLLBACK TO savepoint;
Příklady příkazů SAVEPOINT a ROLLBACK:
Pokud máte v systému existující databázi, použijte tuto existující databázi nebo vytvořte novou databázi. Vybereme již existující databázi s názvem Společnost.
USE Company
Zvažte existující tabulky zaměstnanců, které mají následující záznamy:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
1001 | VAIBHAVI | MISHRA | 65 000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | TESTOVÁNÍ | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
V SQL se k zahájení transakce používá dotaz START TRANSACTION.
START TRANSACTION;
Nyní vložíme dva záznamy do existující tabulky Zaměstnanci. Pro vložení více záznamů použijeme níže uvedený příkaz:
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);
Nyní pomocí dotazu SELECT ověříme, zda jsou záznamy do tabulky vloženy úspěšně či nikoli.
SELECT * FROM EMPLOYEES;
Výstup pro výše uvedený dotaz:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
1001 | VAIBHAVI | MISHRA | 65 000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | TESTOVÁNÍ | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57 000 | PUNE | TESTOVÁNÍ | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Jak všichni víme, příkaz SAVEPOINT v SQL se používá k uložení různých částí stejné transakce. Předpokládejme, že vložení je jedním segmentem naší transakce. Pomocí bodu uložení uložte tento segment vložení jako vložení.
SAVEPOINT Insertion;
Nyní provedeme operaci UPDATE na tabulkách zaměstnanců a aktualizujeme plat zaměstnance o 1,2 pro ID zaměstnance 2003.
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;
Operaci aktualizace zkontrolujeme provedením dotazu SELECT v tabulce Zaměstnanci:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
2003 | RUCHIKA | JAIN | 60 000 | MUMBAI | TESTOVÁNÍ | 4 |
Výše uvedené výsledky dotazu ukazují, že záznam id zaměstnance 2003 byl úspěšně aktualizován.
Považujte aktualizační dotaz za jeden segment naší transakce. Část operace aktualizace uložíme pomocí SAVEPOINT s názvem Aktualizace.
SAVEPOINT Updation;
Nyní provedeme operaci odstranění v tabulce Zaměstnanci. Provedeme operaci odstranění na tabulce zaměstnanců, kde je mzda zaměstnance vyšší než 60 000.
DELETE FROM EMPLOYEES WHERE SALARY > 60000;
Operaci odstranění zkontrolujeme provedením dotazu SELECT v tabulce Zaměstnanci:
SELECT * FROM EMPLOYEES;
Výstup pro výše uvedený dotaz:
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 |
2003 | RUCHIKA | JAIN | 60 000 | MUMBAI | TESTOVÁNÍ | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57 000 | PUNE | TESTOVÁNÍ | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Výše uvedený dotaz ukazuje, že odstranění záznamů zaměstnanců bylo úspěšné.
Považujte mazací dotazy za jeden segment naší transakce. Část operace aktualizace uložíme pomocí SAVEPOINT s názvem Delete.
SAVEPOINT Deletion;
Náhle si uživatel uvědomil, že dotaz, který jsme chtěli provést při operaci odstranění, neměl být tímto dotazem. V takové situaci se uživatelé vrátí zpět k celé transakci do SAVEPOINT; Uživatel se může vrátit zpět na libovolný SAVEPOINT, který chce vrátit, jako je Vložení, Aktualizace SAVEPOINT.
ROLLBACK TO Insertion;
Pokud uživatel nechce odstranit záznamy. Uživatel tedy bude vrácen zpět do ÚLOŽNÉHO POINT vložení.
Pro křížovou kontrolu, že máme stejnou tabulku zaměstnanců, jakou jsme měli před provedením operací aktualizace a odstranění. Chcete-li získat podrobnosti o zaměstnancích, proveďte operaci SELECT na stole zaměstnanců.
SELECT * FROM EMPLOYEES;
ID ZAMĚSTNANCE | FIRST_NAME | LAST_NAME | PLAT | MĚSTO | ODDĚLENÍ | ID SPRÁVCE |
1001 | VAIBHAVI | MISHRA | 65 000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIgarH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | TESTOVÁNÍ | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTOVÁNÍ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57 000 | PUNE | TESTOVÁNÍ | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |