In Structured Query Language is TCL een afkorting voor Transaction Control Language. Een enkele werkeenheid in een database wordt gevormd nadat de opeenvolgende uitvoering van opdrachten bekend staat als een transactie.
Er zijn enkele opdrachten in de Structured Query Language en de opdracht Transaction Control Language is een van de SQL-opdrachten. TCL-commando's verwerken de transacties in een database
In Structured Query Language zijn Commit, Rollback en Savepoint de Transaction Control Language-opdrachten die veel worden gebruikt in SQL.
Laten we nu met behulp van een paar voorbeelden begrijpen en leren hoe de Transaction Control Language-opdrachten werken in de Structured Query-taal. Transactiecontrole Taalcommando's zijn:
- COMMIT-opdracht
- ROLLBACK-opdracht
- SAVEPOINT-opdracht
COMMIT-opdracht
Commit Command in SQL wordt gebruikt om alle transacties die permanent veranderen op de schijf op te slaan. Telkens wanneer we de bewerking uitvoeren op Data Definition Language-commando's (DDL), zoals INSERT-commando, UPDATE-commando en DELETE-commando, zijn alle wijzigingen die door deze commando's worden aangebracht permanent, maar voordat de huidige sessie wordt afgesloten of tot het einde van de sessie. We kunnen de bewerking die we hebben uitgevoerd eenvoudig ongedaan maken met de Data Definition Language voordat de sessie wordt afgesloten. De opdracht Commit wordt gebruikt om de wijziging permanent in de opslag op te slaan zonder dat de sessie wordt beëindigd.
Syntaxis:
COMMIT;
Als u een bestaande database in het systeem hebt, gebruikt u die bestaande database of maakt u een nieuwe database. We zullen de bestaande database Company gebruiken.
USE Company
Overweeg de reeds bestaande werknemerstabellen die de bepaalde gegevens hebben:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORAKLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORAKLE | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORAKLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 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 | TESTEN | 4 |
In SQL wordt de START TRANSACTION-query gebruikt om de transactie te starten.
START TRANSACTION;
Nu gaan we twee records invoegen in de bestaande tabel Werknemers. Om meerdere records in te voegen, gebruiken we de onderstaande verklaring:
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);
We zullen nu de SELECT-query gebruiken om te controleren of de records al dan niet met succes in de tabel zijn ingevoegd.
SELECT * FROM EMPLOYEES;
Uitvoer op de bovenstaande zoekopdracht:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORAKLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORAKLE | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORAKLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 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 | TESTEN | 4 |
4002 | ASHWINI | BAGHAT | 54500 | JAIPUR | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | TESTEN | 4 |
De uitvoer toont dat alle records met succes zijn ingevoegd.
Om de INSERT-bewerking op de Employees-tabel op te slaan, voeren we het COMMIT-commando uit.
COMMIT;
In SQL is automatisch vastleggen standaard ingeschakeld. Om de auto-commit in de SQL uit te schakelen, stelt u de auto-commit waarde in op 0.
We zullen het werknemers-ID 4002 bijwerken en de stad instellen als 'Noida. Gebruik de onderstaande vraag om het werknemersrecord bij te werken.
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;
We zullen nu de SELECT-query gebruiken om te controleren of het record met succes is bijgewerkt of niet in de tabel.
SELECT * FROM EMPLOYEES;
Uitvoer op de bovenstaande zoekopdracht:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORAKLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORAKLE | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORAKLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 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 | TESTEN | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | TESTEN | 4 |
Zoals we kunnen zien in de output, is werknemer-ID 4002 stad gewijzigd.
Om de wijzigingen op de werknemerstafel op te slaan, schrijven we een COMMIT-commando.
COMMIT;
Nu zullen we de werknemer-ID 4003 verwijderen uit de tabel Werknemers. Gebruik de onderstaande vraag om het werknemersrecord te verwijderen.
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;
We zullen nu de SELECT-query gebruiken om te controleren of het record met succes is verwijderd of niet in de tabel.
SELECT * FROM EMPLOYEES;
Uitvoer op de bovenstaande zoekopdracht:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORAKLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORAKLE | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORAKLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 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 | TESTEN | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
De uitvoer bevestigt dat we de details van het werknemers-ID 4003 hebben verwijderd.
Om de wijzigingen op de werknemerstafel op te slaan, schrijven we een COMMIT-commando.
COMMIT;
SAVEPOINT-opdracht
Uitgevoerde databasebewerkingen kunnen in twee delen worden verdeeld. Beschouw bijvoorbeeld alle verwijderingsverklaringen die we hebben uitgevoerd als één segment van de transactie en de updateverklaring als één segment van de transactie. Om insert-query's op te slaan in het insert-gedeelte en delete-query's in het delete-gedeelte van dezelfde transactie, gebruiken we de opdracht SAVEPOINT in SQL. Stel dat we alle verwijdergerelateerde query's willen opslaan met het opslagpunt met de naam delete. Om alle verwijdergerelateerde bewerkingen in één opslagpunt op te slaan, moeten we het SAVEPOINT-commando uitvoeren gevolgd door de naam van het opslagpunt na het uitvoeren van de verwijderquery.
Syntaxis:
SAVEPOINT savepoint name;
ROLLBACK-opdracht
Tijdens het uitvoeren van een transactie hebben we de savepoints gebouwd om de verschillende segmenten van de transactie op te slaan. Naarmate de vereisten van de Gebruiker veranderen, kan de Gebruiker de transactie naar verschillende opslagpunten ongedaan maken. Overweeg een scenario:we hebben een transactie gestart, gevolgd door het maken van de tabel en het invoegen van records in de tabel. We hebben de INS met de naam savepoint gebouwd nadat we records aan de tabel hebben toegevoegd. Na het invoegen hebben we de wisbewerking uitgevoerd en later herinnerden we ons dat we per ongeluk de verkeerde records hadden verwijderd. We zullen onze transactie ongedaan maken om het savepoint INS te bereiken. Gebruik de opdracht ROLLBACK om de transactie ongedaan te maken.
We kunnen de operatie die we hebben uitgevoerd terugdraaien of de hele savepoint-transactie terugdraaien.
Syntaxis om de bewerking terug te draaien:
ROLLBACK;
Syntaxis om de transactie terug te draaien:
ROLLBACK TO savepoint;
Voorbeelden van de opdrachten SAVEPOINT en ROLLBACK:
Als u een bestaande database in het systeem hebt, gebruikt u die bestaande database of maakt u een nieuwe database. We zullen de reeds bestaande database met de naam Bedrijf selecteren.
USE Company
Overweeg de bestaande werknemerstabellen die de volgende records hebben:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORAKLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORAKLE | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORAKLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 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 | TESTEN | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
In SQL wordt de START TRANSACTION-query gebruikt om de transactie te starten.
START TRANSACTION;
Nu gaan we twee records invoegen in de bestaande tabel Werknemers. Om meerdere records in te voegen, gebruiken we onderstaande verklaring:
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);
We zullen nu de SELECT-query gebruiken om te controleren of de records al dan niet met succes in de tabel zijn ingevoegd.
SELECT * FROM EMPLOYEES;
Uitvoer op de bovenstaande zoekopdracht:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORAKLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORAKLE | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORAKLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 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 | TESTEN | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | TESTEN | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Zoals we allemaal weten, wordt de opdracht SAVEPOINT in SQL gebruikt om verschillende delen van dezelfde transactie op te slaan. Stel dat invoeging een onderdeel van onze transactie is. Gebruik savepoint om dit invoegsegment op te slaan als invoeging.
SAVEPOINT Insertion;
Nu zullen we de UPDATE-bewerking uitvoeren op de werknemerstabellen en we zullen het werknemerssalaris bijwerken met 1,2 voor de werknemer-ID 2003.
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;
We zullen de update-bewerking controleren door de SELECT-query uit te voeren in de tabel Werknemers:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
2003 | RUCHIKA | JAIN | 60000 | MUMBAI | TESTEN | 4 |
De bovenstaande zoekresultaten laten zien dat het record van de werknemer-ID 2003 met succes is bijgewerkt.
Beschouw de update-query als een onderdeel van onze transactie. We zullen het update-bewerkingsgedeelte opslaan met behulp van een SAVEPOINT genaamd een update.
SAVEPOINT Updation;
Nu gaan we een wisbewerking uitvoeren op de tabel Werknemers. We zullen een verwijderingsbewerking uitvoeren op de werknemerstabel waar het werknemerssalaris hoger is dan 60000.
DELETE FROM EMPLOYEES WHERE SALARY > 60000;
We zullen de wisbewerking controleren door de SELECT-query uit te voeren in de tabel Werknemers:
SELECT * FROM EMPLOYEES;
Uitvoer op de bovenstaande zoekopdracht:
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORAKLE | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORAKLE | 1 |
2003 | RUCHIKA | JAIN | 60000 | MUMBAI | TESTEN | 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 | 57000 | PUNE | TESTEN | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
De bovenstaande query laat zien dat het verwijderen van de werknemersrecords is gelukt.
Beschouw de verwijderquery's als een onderdeel van onze transactie. We zullen het update-bewerkingsgedeelte opslaan met een SAVEPOINT genaamd Verwijdering.
SAVEPOINT Deletion;
Plotseling realiseerde de gebruiker zich dat de query die we wilden uitvoeren op de verwijderingsbewerking niet die query was. In een dergelijke situatie zullen gebruikers de hele transactie terugdraaien naar het SAVEPOINT; de gebruiker kan teruggaan naar elk SAVEPOINT dat hij wil terugdraaien, zoals Insertion, Update SAVEPOINT.
ROLLBACK TO Insertion;
Als de gebruiker de records niet wil verwijderen. Daarom wordt de gebruiker teruggezet naar het SAVEPOINT voor invoeging.
Om te controleren of we dezelfde werknemerstabel hebben die we hadden voordat we de update- en verwijderingsbewerkingen uitvoerden. Om de gegevens van de werknemers op te halen, voert u de SELECT-bewerking uit op de tafel van de werknemers.
SELECT * FROM EMPLOYEES;
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORAKLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORAKLE | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORAKLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 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 | TESTEN | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | TESTEN | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |