sql >> Databáze >  >> RDS >> Database

TCL příkazy v SQL

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:

  1. Příkaz COMMIT
  2. Příkaz ROLLBACK
  3. 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


  1. Jak vytvořit primární klíč v SQL Server (příklady T-SQL)

  2. Použití Dapper s uloženými procedurami Oracle, které vracejí kurzory

  3. Jak vytvořit uložené procedury PL/SQL bez parametrů v databázi Oracle

  4. Jak mohu vygenerovat jedinečný řetězec na záznam v tabulce v Postgres?