I Structured Query Language er TCL en forkortelse for Transaction Control Language. En enkelt arbejdsenhed i en database dannes efter den fortløbende udførelse af kommandoer er kendt som en transaktion.
Der er nogle kommandoer i Structured Query Language, og Transaction Control Language-kommandoen er en af SQL-kommandoerne. TCL-kommandoer håndterer transaktionerne i en database
I Structured Query Language er Commit, Rollback og Savepoint de kommandoer til Transaction Control Language, der er meget brugt i SQL.
Lad os nu forstå og lære, hvordan kommandoerne Transaction Control Language fungerer i Structured Query-sproget ved hjælp af nogle få eksempler. Sprogkommandoer for transaktionskontrol er:
- COMMIT-kommando
- ROLLBACK-kommando
- SAVEPOINT-kommando
COMMIT-kommando
Commit Command i SQL bruges til at gemme alle de transaktioner, der ændres permanent på disken. Når vi udfører handlingen på Data Definition Language-kommandoer (DDL) såsom INSERT-kommando, UPDATE-kommando og DELETE-kommando, er de ændringer, der foretages af disse kommandoer, permanente, men før den aktuelle session lukkes eller indtil slutningen af sessionen. Vi kan nemt fortryde den handling, vi udførte, ved hjælp af Data Definition Language, før sessionen lukkes ned. Commit-kommandoen bruges til at gemme ændringen permanent på lageret uden at sessionen afsluttes.
Syntaks:
COMMIT;
Hvis du har en eksisterende database i systemet, skal du bruge den eksisterende database eller oprette en ny database. Vi vil bruge den eksisterende database Company.
USE Company
Overvej de allerede eksisterende medarbejderes tabeller, som har de bestemte data:
EMPLOYEEID | FIRST_NAME | LAST_NAME | LØN | BY | AFDELING | 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 | TEST | 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 | TEST | 4 |
I SQL bruges START TRANSACTION-forespørgslen til at starte transaktionen.
START TRANSACTION;
Nu vil vi indsætte to poster i den eksisterende medarbejdertabel. For at indsætte flere poster, vil vi bruge nedenstående erklæring:
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 vil nu bruge SELECT-forespørgslen til at bekræfte, om posterne er indsat korrekt eller ej i tabellen.
SELECT * FROM EMPLOYEES;
Output på ovenstående forespørgsel:
EMPLOYEEID | FIRST_NAME | LAST_NAME | LØN | BY | AFDELING | 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 | TEST | 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 | TEST | 4 |
4002 | ASHWINI | BAGHAT | 54500 | JAIPUR | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57.000 | PUNE | TEST | 4 |
Outputtet viser, at alle poster er indsat.
For at gemme INSERT-handlingen på tabellen Employees, udfører vi kommandoen COMMIT.
COMMIT;
I SQL er auto-commit som standard slået til. For at deaktivere auto-commit i SQL skal du indstille auto-commit-værdien til 0.
Vi vil opdatere medarbejder-id 4002 og sætte byen som 'Noida. Brug nedenstående forespørgsel til at opdatere medarbejderregistreringen.
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;
Vi vil nu bruge SELECT-forespørgslen til at bekræfte, om posten er opdateret korrekt eller ej i tabellen.
SELECT * FROM EMPLOYEES;
Output på ovenstående forespørgsel:
EMPLOYEEID | FIRST_NAME | LAST_NAME | LØN | BY | AFDELING | 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 | TEST | 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 | TEST | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57.000 | PUNE | TEST | 4 |
Som vi kan se i outputtet, blev medarbejder-id 4002 by ændret.
For at gemme ændringerne på medarbejdernes bord, skriver vi en COMMIT-kommando.
COMMIT;
Nu vil vi slette medarbejder-id 4003 fra tabellen Medarbejdere. Brug nedenstående forespørgsel til at slette medarbejderregistreringen.
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;
Vi vil nu bruge SELECT-forespørgslen til at bekræfte, om posten er slettet korrekt eller ej i tabellen.
SELECT * FROM EMPLOYEES;
Output på ovenstående forespørgsel:
EMPLOYEEID | FIRST_NAME | LAST_NAME | LØN | BY | AFDELING | 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 | TEST | 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 | TEST | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
Outputtet bekræfter, at vi har slettet medarbejder-id 4003-detaljerne.
For at gemme ændringerne på medarbejdernes bord, skriver vi en COMMIT-kommando.
COMMIT;
SAVEPOINT-kommando
Udførte databaseoperationer kan opdeles i to dele. Betragt f.eks. alle de sletningserklæringer, vi udførte, som ét segment af transaktionen og opdateringserklæringen som ét segment af transaktionen. For at gemme indsæt-forespørgsler i indsæt-delen og slette forespørgsler i dele-delen af samme transaktion, bruger vi kommandoen SAVEPOINT i SQL. Antag, at vi vil gemme alle slette-relaterede forespørgsler med lagringspunktet med navnet delete. For at gemme alle slette-relaterede operationer i ét savepoint, skal vi udføre SAVEPOINT-kommandoen efterfulgt af savepoint-navnet efter at have udført sletteforespørgslen.
Syntaks:
SAVEPOINT savepoint name;
ROLLBACK-kommando
Mens vi udførte en transaktion, byggede vi lagringspunkterne for at gemme de forskellige segmenter af transaktionen. Efterhånden som brugerens krav ændres, kan brugeren fortryde transaktionen til forskellige lagringspunkter. Overvej et scenario:Vi har startet en transaktion efterfulgt af tabeloprettelse og registreringsindsættelse i tabellen. Vi byggede INS-navnet savepoint efter at have tilføjet poster til tabellen. Efter indsættelse udførte vi sletteoperationen, og senere huskede vi fejlagtigt slettede de forkerte poster. Vi fortryder vores transaktion for at nå savepoint INS. For at fortryde transaktionen, brug kommandoen ROLLBACK.
Vi kan rulle tilbage den operation, vi udførte, eller rulle hele savepoint-transaktionen tilbage.
Syntaks for at rulle handlingen tilbage:
ROLLBACK;
Syntaks til at tilbageføre transaktionen:
ROLLBACK TO savepoint;
Eksempler på kommandoerne SAVEPOINT og ROLLBACK:
Hvis du har en eksisterende database i systemet, skal du bruge den eksisterende database eller oprette en ny database. Vi vil vælge den allerede eksisterende database med navnet Company.
USE Company
Overvej den eksisterende medarbejders tabeller, som har følgende poster:
EMPLOYEEID | FIRST_NAME | LAST_NAME | LØN | BY | AFDELING | 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 | TEST | 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 | TEST | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
I SQL bruges START TRANSACTION-forespørgslen til at starte transaktionen.
START TRANSACTION;
Nu vil vi indsætte to poster i den eksisterende tabel Medarbejdere. For at indsætte flere poster vil vi bruge nedenstående erklæring:
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 vil nu bruge SELECT-forespørgslen til at bekræfte, om posterne er indsat korrekt eller ej i tabellen.
SELECT * FROM EMPLOYEES;
Output på ovenstående forespørgsel:
EMPLOYEEID | FIRST_NAME | LAST_NAME | LØN | BY | AFDELING | 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 | TEST | 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 | TEST | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57.000 | PUNE | TEST | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Som vi alle ved, bruges SAVEPOINT-kommandoen i SQL til at gemme forskellige dele af den samme transaktion. Antag, at indsættelse er et segment af vores transaktion. Brug savepoint til at gemme dette indsættelsessegment som insertion.
SAVEPOINT Insertion;
Nu vil vi udføre OPDATERING på medarbejdertabellerne, og vi vil opdatere medarbejderløn med 1,2 for medarbejder-id 2003.
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;
Vi krydstjekker opdateringshandlingen ved at udføre SELECT-forespørgslen i tabellen Medarbejdere:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
EMPLOYEEID | FIRST_NAME | LAST_NAME | LØN | BY | AFDELING | MANAGERID |
2003 | RUCHIKA | JAIN | 60.000 | MUMBAI | TEST | 4 |
Ovenstående forespørgselsresultater viser, at medarbejder-id 2003-posten er opdateret.
Betragt opdateringsforespørgslen som et segment af vores transaktion. Vi gemmer opdateringsoperationsdelen ved hjælp af et SAVEPOINT kaldet en opdatering.
SAVEPOINT Updation;
Nu vil vi udføre en sletteoperation på tabellen Medarbejdere. Vi udfører sletningsoperationer på medarbejdertabellen, hvor medarbejderlønnen er større end 60.000.
DELETE FROM EMPLOYEES WHERE SALARY > 60000;
Vi krydstjekker slettehandlingen ved at udføre SELECT-forespørgslen i tabellen Medarbejdere:
SELECT * FROM EMPLOYEES;
Output på ovenstående forespørgsel:
EMPLOYEEID | FIRST_NAME | LAST_NAME | LØN | BY | AFDELING | 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 | TEST | 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 | TEST | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Ovenstående forespørgsel viser, at sletning af medarbejderregistreringer lykkedes.
Betragt sletteforespørgslerne som et segment af vores transaktion. Vi gemmer opdateringsoperationsdelen ved hjælp af et SAVEPOINT kaldet en Deletion.
SAVEPOINT Deletion;
Pludselig indså brugeren, at den forespørgsel, vi ønskede at udføre på sletningsoperationen, ikke skulle være den forespørgsel. I en sådan situation vil brugerne rulle tilbage til hele transaktionen til SAVEPOINT; Brugeren kan rulle tilbage til ethvert SAVEPOINT, han ønsker at rulle tilbage, f.eks. Insertion, Update SAVEPOINT.
ROLLBACK TO Insertion;
Hvis brugeren ikke ønsker at fjerne registreringerne. Derfor vil brugeren blive rullet tilbage til indsættelses-SAVEPOINT.
For at krydstjekke, at vi har fået den samme medarbejdertabel, som vi havde, før vi udførte opdaterings- og sletningshandlingerne. For at hente medarbejdernes detaljer skal du udføre SELECT-handlingen på medarbejdernes bord.
SELECT * FROM EMPLOYEES;
EMPLOYEEID | FIRST_NAME | LAST_NAME | LØN | BY | AFDELING | 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 | TEST | 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 | TEST | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57.000 | PUNE | TEST | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |