In der Structured Query Language ist TCL eine Abkürzung für Transaction Control Language. Eine einzelne Arbeitseinheit in einer Datenbank wird gebildet, nachdem die aufeinanderfolgende Ausführung von Befehlen als Transaktion bezeichnet wird.
Es gibt einige Befehle in der Structured Query Language, und der Befehl Transaction Control Language ist einer der SQL-Befehle. TCL-Befehle handhaben die Transaktionen in einer Datenbank
In der Structured Query Language sind Commit, Rollback und Savepoint die in SQL weit verbreiteten Befehle der Transaction Control Language.
Lassen Sie uns nun anhand einiger Beispiele verstehen und lernen, wie die Befehle der Transaktionssteuerungssprache in der strukturierten Abfragesprache funktionieren. Befehle der Transaktionskontrollsprache sind:
- COMMIT-Befehl
- ROLLBACK-Befehl
- SAVEPOINT-Befehl
COMMIT-Befehl
Der Commit-Befehl in SQL wird verwendet, um alle Transaktionen, die sich dauerhaft ändern, auf der Festplatte zu speichern. Wann immer wir die Operation mit Data Definition Language-Befehlen (DDL) wie dem INSERT-Befehl, dem UPDATE-Befehl und dem DELETE-Befehl ausführen, sind alle Änderungen, die durch diese Befehle vorgenommen werden, dauerhaft, aber vor dem Schließen der aktuellen Sitzung oder bis zum Ende der Sitzung. Wir können den Vorgang, den wir mit der Data Definition Language durchgeführt haben, leicht rückgängig machen, bevor die Sitzung beendet wird. Der Commit-Befehl wird verwendet, um die Änderung dauerhaft im Speicher zu speichern, ohne dass die Sitzung beendet wird.
Syntax:
COMMIT;
Wenn Sie eine vorhandene Datenbank im System haben, verwenden Sie diese vorhandene Datenbank oder erstellen Sie eine neue Datenbank. Wir werden die vorhandene Datenbank Company.
verwendenUSE Company
Betrachten Sie die bereits vorhandenen Mitarbeitertabellen, die bestimmte Daten enthalten:
MITARBEITERID | FIRST_NAME | NACHNAME | GEHALT | STADT | ABTEILUNG | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUSCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 4 |
3001 | PRANOTI | SCHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOLD | 60500 | MUMBAI | TESTEN | 4 |
In SQL wird die Abfrage START TRANSACTION verwendet, um die Transaktion zu beginnen.
START TRANSACTION;
Jetzt fügen wir zwei Datensätze in die vorhandene Employees-Tabelle ein. Um mehrere Datensätze einzufügen, verwenden wir die folgende Anweisung:
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);
Wir werden nun die SELECT-Abfrage verwenden, um zu überprüfen, ob die Datensätze erfolgreich in die Tabelle eingefügt wurden oder nicht.
SELECT * FROM EMPLOYEES;
Ausgabe bei obiger Abfrage:
MITARBEITERID | FIRST_NAME | NACHNAME | GEHALT | STADT | ABTEILUNG | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUSCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 4 |
3001 | PRANOTI | SCHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOLD | 60500 | MUMBAI | TESTEN | 4 |
4002 | ASHWINI | BAGHAT | 54500 | JAIPUR | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | TESTEN | 4 |
Die Ausgabe zeigt, dass alle Datensätze erfolgreich eingefügt wurden.
Um die INSERT-Operation in der Employees-Tabelle zu speichern, führen wir den COMMIT-Befehl aus.
COMMIT;
In SQL ist Auto-Commit standardmäßig aktiviert. Um die Auto-Commit-Funktion in SQL zu deaktivieren, setzen Sie den Auto-Commit-Wert auf 0.
Wir werden die Mitarbeiter-ID 4002 aktualisieren und die Stadt als „Noida“ festlegen. Verwenden Sie die folgende Abfrage, um den Mitarbeiterdatensatz zu aktualisieren.
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;
Wir werden nun die SELECT-Abfrage verwenden, um zu überprüfen, ob der Datensatz erfolgreich in der Tabelle aktualisiert wurde oder nicht.
SELECT * FROM EMPLOYEES;
Ausgabe bei obiger Abfrage:
MITARBEITERID | FIRST_NAME | NACHNAME | GEHALT | STADT | ABTEILUNG | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUSCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 4 |
3001 | PRANOTI | SCHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOLD | 60500 | MUMBAI | TESTEN | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | TESTEN | 4 |
Wie wir in der Ausgabe sehen können, wurde die Mitarbeiter-ID 4002 Stadt geändert.
Um die Änderungen in der Mitarbeitertabelle zu speichern, schreiben wir einen COMMIT-Befehl.
COMMIT;
Jetzt löschen wir die Mitarbeiter-ID 4003 aus der Mitarbeitertabelle. Verwenden Sie die folgende Abfrage, um den Mitarbeiterdatensatz zu löschen.
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;
Wir werden nun die SELECT-Abfrage verwenden, um zu überprüfen, ob der Datensatz in der Tabelle erfolgreich gelöscht wurde oder nicht.
SELECT * FROM EMPLOYEES;
Ausgabe bei obiger Abfrage:
MITARBEITERID | FIRST_NAME | NACHNAME | GEHALT | STADT | ABTEILUNG | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUSCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 4 |
3001 | PRANOTI | SCHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOLD | 60500 | MUMBAI | TESTEN | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
Die Ausgabe bestätigt, dass wir die Mitarbeiter-ID 4003 gelöscht haben.
Um die Änderungen in der Mitarbeitertabelle zu speichern, schreiben wir einen COMMIT-Befehl.
COMMIT;
SAVEPOINT-Befehl
Durchgeführte Datenbankoperationen können in zwei Teile unterteilt werden. Betrachten Sie beispielsweise alle von uns ausgeführten Löschanweisungen als ein Segment der Transaktion und die Aktualisierungsanweisung als ein Segment der Transaktion. Um Einfügeabfragen im Einfügeteil und Löschabfragen im Löschteil derselben Transaktion zu speichern, verwenden wir den SAVEPOINT-Befehl in SQL. Angenommen, wir möchten alle löschbezogenen Abfragen mit dem Sicherungspunkt namens delete speichern. Um alle löschbezogenen Operationen in einem Sicherungspunkt zu speichern, müssen wir den Befehl SAVEPOINT gefolgt vom Namen des Sicherungspunkts ausführen, nachdem wir die Löschabfrage durchgeführt haben.
Syntax:
SAVEPOINT savepoint name;
ROLLBACK-Befehl
Während der Durchführung einer Transaktion haben wir die Sicherungspunkte erstellt, um die verschiedenen Segmente der Transaktion zu speichern. Wenn sich die Anforderungen des Benutzers ändern, kann der Benutzer die Transaktion an verschiedenen Sicherungspunkten rückgängig machen. Stellen Sie sich ein Szenario vor:Wir haben eine Transaktion initiiert, gefolgt von der Tabellenerstellung und dem Einfügen von Datensätzen in die Tabelle. Wir haben den INS mit dem Namen savepoint erstellt, nachdem wir der Tabelle Datensätze hinzugefügt hatten. Nach dem Einfügen führten wir den Löschvorgang durch und erinnerten uns später daran, versehentlich die falschen Datensätze gelöscht zu haben. Wir werden unsere Transaktion rückgängig machen, um den Sicherungspunkt INS zu erreichen. Um die Transaktion rückgängig zu machen, verwenden Sie den ROLLBACK-Befehl.
Wir können die durchgeführte Operation rückgängig machen oder die gesamte Savepoint-Transaktion rückgängig machen.
Syntax zum Rollback des Vorgangs:
ROLLBACK;
Syntax zum Rollback der Transaktion:
ROLLBACK TO savepoint;
Beispiele für die Befehle SAVEPOINT und ROLLBACK:
Wenn Sie eine vorhandene Datenbank im System haben, verwenden Sie diese vorhandene Datenbank oder erstellen Sie eine neue Datenbank. Wir wählen die bereits vorhandene Datenbank mit dem Namen Company.
ausUSE Company
Betrachten Sie die vorhandenen Mitarbeitertabellen mit den folgenden Datensätzen:
MITARBEITERID | FIRST_NAME | NACHNAME | GEHALT | STADT | ABTEILUNG | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUSCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 4 |
3001 | PRANOTI | SCHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOLD | 60500 | MUMBAI | TESTEN | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
In SQL wird die Abfrage START TRANSACTION verwendet, um die Transaktion zu beginnen.
START TRANSACTION;
Jetzt fügen wir zwei Datensätze in die vorhandene Employees-Tabelle ein. Um mehrere Datensätze einzufügen, verwenden wir die folgende Anweisung:
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);
Wir werden nun die SELECT-Abfrage verwenden, um zu überprüfen, ob die Datensätze erfolgreich in die Tabelle eingefügt wurden oder nicht.
SELECT * FROM EMPLOYEES;
Ausgabe bei obiger Abfrage:
MITARBEITERID | FIRST_NAME | NACHNAME | GEHALT | STADT | ABTEILUNG | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUSCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 4 |
3001 | PRANOTI | SCHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOLD | 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 |
Wie wir alle wissen, wird der SAVEPOINT-Befehl in SQL verwendet, um verschiedene Teile derselben Transaktion zu speichern. Angenommen, Insertion ist ein Segment unserer Transaktion. Verwenden Sie den Sicherungspunkt, um dieses Einfügungssegment als Einfügung zu speichern.
SAVEPOINT Insertion;
Jetzt führen wir die UPDATE-Operation für die Employee-Tabellen durch und aktualisieren das Mitarbeitergehalt um 1,2 für die Mitarbeiter-ID 2003.
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;
Wir werden den Aktualisierungsvorgang gegenprüfen, indem wir die SELECT-Abfrage für die Employees-Tabelle ausführen:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
MITARBEITERID | FIRST_NAME | NACHNAME | GEHALT | STADT | ABTEILUNG | MANAGERID |
2003 | RUSCHIKA | JAIN | 60000 | MUMBAI | TESTEN | 4 |
Die obigen Abfrageergebnisse zeigen, dass der Mitarbeiter-ID-Datensatz 2003 erfolgreich aktualisiert wurde.
Betrachten Sie die Aktualisierungsabfrage als ein Segment unserer Transaktion. Wir speichern den Teil des Aktualisierungsvorgangs unter Verwendung eines SAVEPOINT namens Update.
SAVEPOINT Updation;
Jetzt führen wir einen Löschvorgang für die Employees-Tabelle durch. Wir führen einen Löschvorgang für die Mitarbeitertabelle durch, wenn das Mitarbeitergehalt größer als 60000 ist.
DELETE FROM EMPLOYEES WHERE SALARY > 60000;
Wir überprüfen den Löschvorgang, indem wir die SELECT-Abfrage für die Employees-Tabelle ausführen:
SELECT * FROM EMPLOYEES;
Ausgabe bei obiger Abfrage:
MITARBEITERID | FIRST_NAME | NACHNAME | GEHALT | STADT | ABTEILUNG | MANAGERID |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2003 | RUSCHIKA | JAIN | 60000 | MUMBAI | TESTEN | 4 |
3001 | PRANOTI | SCHENDE | 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 |
Die obige Abfrage zeigt, dass das Löschen der Mitarbeiterdatensätze erfolgreich war.
Betrachten Sie die Löschabfragen als ein Segment unserer Transaktion. Wir speichern den Teil des Aktualisierungsvorgangs mit einem SAVEPOINT namens Deletion.
SAVEPOINT Deletion;
Plötzlich erkannte der Benutzer, dass die Abfrage, die wir für den Löschvorgang durchführen wollten, nicht diese Abfrage sein sollte. In einer solchen Situation rollen Benutzer auf die gesamte Transaktion bis zum SAVEPOINT zurück; Der Benutzer kann zu jedem SAVEPOINT zurückkehren, den er zurücksetzen möchte, z. B. Insertion, Updation SAVEPOINT.
ROLLBACK TO Insertion;
Wenn der Benutzer die Datensätze nicht entfernen möchte. Daher wird der Benutzer zum Insertion SAVEPOINT.
zurückgesetztUm zu überprüfen, ob wir dieselbe Mitarbeitertabelle haben, die wir vor der Durchführung der Aktualisierungs- und Löschvorgänge hatten. Um die Mitarbeiterdaten abzurufen, führen Sie die SELECT-Operation für die Mitarbeitertabelle aus.
SELECT * FROM EMPLOYEES;
MITARBEITERID | FIRST_NAME | NACHNAME | GEHALT | STADT | ABTEILUNG | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUSCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 4 |
3001 | PRANOTI | SCHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOLD | 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 |