I Structured Query Language är TCL en förkortning för Transaction Control Language. En enda arbetsenhet i en databas bildas efter att kommandon utförs i följd kallas en transaktion.
Det finns några kommandon i Structured Query Language, och Transaction Control Language-kommandot är ett av SQL-kommandona. TCL-kommandon hanterar transaktionerna i en databas
I Structured Query Language är Commit, Rollback och Savepoint de kommandon för Transaction Control Language som används ofta i SQL.
Låt oss nu förstå och lära oss hur kommandona Transaction Control Language fungerar i Structured Query-språket med hjälp av några exempel. Språkkommandon för transaktionskontroll är:
- COMMIT-kommando
- ROLLBACK-kommando
- SAVEPOINT-kommando
COMMIT-kommando
Commit Command i SQL används för att spara alla transaktioner som ändras permanent på disken. Närhelst vi utför operationen på Data Definition Language-kommandon (DDL) som INSERT-kommandot, UPDATE-kommandot och DELETE-kommandot, är alla ändringar som görs av dessa kommandon permanenta men innan den aktuella sessionen stängs eller till slutet av sessionen. Vi kan enkelt ångra operationen vi utförde med hjälp av Data Definition Language innan sessionen stängs av. Commit-kommandot används för att spara ändringen permanent i lagringen utan att sessionen avslutas.
Syntax:
COMMIT;
Om du har en befintlig databas i systemet, använd den befintliga databasen eller skapa en ny databas. Vi kommer att använda den befintliga databasen Company.
USE Company
Tänk på de redan befintliga anställdas tabeller som har vissa data:
ANSTÄLLDA ID | FIRST_NAME | LAST_NAME | LÖN | STAD | AVDELNING | MANAGERID |
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 | TESTER | 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 | TESTER | 4 |
I SQL används START TRANSACTION-frågan för att påbörja transaktionen.
START TRANSACTION;
Nu kommer vi att infoga två poster i den befintliga tabellen Anställda. För att infoga flera poster använder vi följande uttalande:
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);
Vi kommer nu att använda SELECT-frågan för att verifiera om posterna har infogats framgångsrikt eller inte i tabellen.
SELECT * FROM EMPLOYEES;
Utdata på ovanstående fråga:
ANSTÄLLDA ID | FIRST_NAME | LAST_NAME | LÖN | STAD | AVDELNING | MANAGERID |
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 | TESTER | 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 | TESTER | 4 |
4002 | ASHWINI | BAGHAT | 54500 | JAIPUR | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57 000 | PUNE | TESTER | 4 |
Utdata visar att alla poster har infogats.
För att spara INSERT-operationen i tabellen Employees kommer vi att köra kommandot COMMIT.
COMMIT;
I SQL är auto-commit på som standard. För att stänga av auto-commit i SQL, ställ in auto-commit-värdet till 0.
Vi kommer att uppdatera medarbetar-ID 4002 och ställa in staden som 'Noida. Använd frågan nedan för att uppdatera personalposten.
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;
Vi kommer nu att använda SELECT-frågan för att verifiera om posten har uppdaterats framgångsrikt eller inte i tabellen.
SELECT * FROM EMPLOYEES;
Utdata på ovanstående fråga:
ANSTÄLLDA ID | FIRST_NAME | LAST_NAME | LÖN | STAD | AVDELNING | MANAGERID |
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 | TESTER | 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 | TESTER | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57 000 | PUNE | TESTER | 4 |
Som vi kan se i utdata ändrades anställd-ID 4002 stad.
För att spara ändringarna på de anställdas bord kommer vi att skriva ett COMMIT-kommando.
COMMIT;
Nu kommer vi att ta bort anställd-id 4003 från tabellen Anställda. Använd frågan nedan för att radera personalposten.
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;
Vi kommer nu att använda SELECT-frågan för att verifiera om posten har raderats framgångsrikt eller inte i tabellen.
SELECT * FROM EMPLOYEES;
Utdata på ovanstående fråga:
ANSTÄLLDA ID | FIRST_NAME | LAST_NAME | LÖN | STAD | AVDELNING | MANAGERID |
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 | TESTER | 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 | TESTER | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
Utdata bekräftar att vi har tagit bort personal-id 4003-detaljerna.
För att spara ändringarna på de anställdas bord kommer vi att skriva ett COMMIT-kommando.
COMMIT;
SAVEPOINT-kommando
Databasoperationer som utförs kan delas upp i två delar. Betrakta till exempel alla raderingssatser vi utförde som ett segment av transaktionen och uppdateringssatsen som ett segment av transaktionen. För att spara insert queries i insert delen och radera frågor i delete delen av samma transaktion använder vi kommandot SAVEPOINT i SQL. Anta att vi vill spara alla raderingsrelaterade frågor med räddningspunkten som heter delete. För att spara alla raderingsrelaterade operationer i en räddningspunkt måste vi utföra kommandot SAVEPOINT följt av räddningspunktens namn efter att ha utfört raderingsfrågan.
Syntax:
SAVEPOINT savepoint name;
ROLLBACK-kommandot
När vi genomförde en transaktion byggde vi räddningspunkterna för att spara de olika segmenten av transaktionen. När användarens krav ändras kan användaren ångra transaktionen till olika sparpunkter. Tänk på ett scenario:Vi har initierat en transaktion följt av att tabellen skapas och posten infogas i tabellen. Vi byggde INS-namnet savepoint efter att ha lagt till poster i tabellen. Efter infogning utförde vi raderingsoperationen, och senare kom vi ihåg att vi av misstag raderade fel poster. Vi kommer att ångra vår transaktion för att nå räddningspunkten INS. För att ångra transaktionen, använd kommandot ROLLBACK.
Vi kan återställa operationen vi utförde eller återställa hela sparpunktstransaktionen.
Syntax för att återställa åtgärden:
ROLLBACK;
Syntax för att återställa transaktionen:
ROLLBACK TO savepoint;
Exempel på kommandona SAVEPOINT och ROLLBACK:
Om du har en befintlig databas i systemet, använd den befintliga databasen eller skapa en ny databas. Vi kommer att välja den redan befintliga databasen med namnet Företag.
USE Company
Tänk på den befintliga medarbetarens tabeller som har följande poster:
ANSTÄLLDA ID | FIRST_NAME | LAST_NAME | LÖN | STAD | AVDELNING | MANAGERID |
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 | TESTER | 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 | TESTER | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
I SQL används START TRANSACTION-frågan för att påbörja transaktionen.
START TRANSACTION;
Nu kommer vi att infoga två poster i den befintliga tabellen Anställda. För att infoga flera poster kommer vi att använda nedanstående uttalande:
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);
Vi kommer nu att använda SELECT-frågan för att verifiera om posterna har infogats framgångsrikt eller inte i tabellen.
SELECT * FROM EMPLOYEES;
Utdata på ovanstående fråga:
ANSTÄLLDA ID | FIRST_NAME | LAST_NAME | LÖN | STAD | AVDELNING | MANAGERID |
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 | TESTER | 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 | TESTER | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57 000 | PUNE | TESTER | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Som vi alla vet används kommandot SAVEPOINT i SQL för att spara olika delar av samma transaktion. Anta att infogning är ett segment av vår transaktion. Använd savepoint för att spara detta infogningssegment som infogning.
SAVEPOINT Insertion;
Nu kommer vi att utföra UPDATE-operationen i tabellerna för anställda, och vi kommer att uppdatera anställdas lön med 1,2 för anställd-id 2003.
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;
Vi kommer att krysskontrollera uppdateringsoperationen genom att köra SELECT-frågan i tabellen Anställda:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
ANSTÄLLDA ID | FIRST_NAME | LAST_NAME | LÖN | STAD | AVDELNING | MANAGERID |
2003 | RUCHIKA | JAIN | 60 000 | MUMBAI | TESTER | 4 |
Ovanstående frågeresultat visar att anställd-id 2003-posten har uppdaterats framgångsrikt.
Betrakta uppdateringsfrågan som ett segment av vår transaktion. Vi kommer att spara uppdateringsoperationsdelen med hjälp av en SAVEPOINT som heter en uppdatering.
SAVEPOINT Updation;
Nu kommer vi att utföra en raderingsoperation på tabellen Anställda. Vi kommer att utföra raderingsåtgärder på personaltabellen där anställdas lön är högre än 60 000.
DELETE FROM EMPLOYEES WHERE SALARY > 60000;
Vi kommer att korskontrollera borttagningen genom att köra SELECT-frågan i tabellen Anställda:
SELECT * FROM EMPLOYEES;
Utdata på ovanstående fråga:
ANSTÄLLDA ID | FIRST_NAME | LAST_NAME | LÖN | STAD | AVDELNING | MANAGERID |
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 | TESTER | 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 | TESTER | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Frågan ovan visar att borttagningen av personalposterna lyckades.
Betrakta raderingsfrågorna som ett segment av vår transaktion. Vi kommer att spara uppdateringsoperationsdelen med hjälp av en SAVEPOINT som heter en Deletion.
SAVEPOINT Deletion;
Plötsligt insåg användaren att frågan vi ville utföra på raderingsoperationen inte var tänkt att vara den frågan. I en sådan situation kommer användare att rulla tillbaka till hela transaktionen till SAVEPOINT; Användaren kan rulla tillbaka till vilken SAVEPOINT som helst han vill rulla tillbaka som Insertion, Update SAVEPOINT.
ROLLBACK TO Insertion;
Om användaren inte vill ta bort posterna. Därför kommer användaren att återställas till SAVEPOINT för infogning.
För att dubbelkontrollera att vi har fått samma personaltabell som vi hade innan vi utförde uppdaterings- och raderingsoperationerna. För att hämta medarbetarnas uppgifter utför SELECT-operationen på de anställdas bord.
SELECT * FROM EMPLOYEES;
ANSTÄLLDA ID | FIRST_NAME | LAST_NAME | LÖN | STAD | AVDELNING | MANAGERID |
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 | TESTER | 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 | TESTER | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57 000 | PUNE | TESTER | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |