In Structured Query Language, TCL è l'abbreviazione di Transaction Control Language. Una singola unità di lavoro in un database viene formata dopo l'esecuzione consecutiva di comandi è nota come transazione.
Esistono alcuni comandi nel linguaggio di query strutturato e il comando del linguaggio di controllo delle transazioni è uno dei comandi SQL. I comandi TCL gestiscono le transazioni in un database
In Structured Query Language, Commit, Rollback e Savepoint sono i comandi del Transaction Control Language ampiamente utilizzati in SQL.
Ora capiamo e impariamo come funzionano i comandi del Transaction Control Language nel linguaggio delle query strutturate con l'aiuto di alcuni esempi. I comandi del linguaggio di controllo delle transazioni sono:
- Comando COMMIT
- Comando ROLLBACK
- Comando SAVEPOINT
Comando COMMIT
Commit Command in SQL viene utilizzato per salvare tutte le transazioni che cambiano in modo permanente sul disco. Ogni volta che eseguiamo l'operazione sui comandi Data Definition Language (DDL) come il comando INSERT, il comando UPDATE e il comando DELETE, tutte le modifiche apportate da questi comandi sono permanenti ma prima della chiusura della sessione corrente o fino alla fine della sessione. Possiamo facilmente annullare l'operazione eseguita utilizzando il Data Definition Language prima che la sessione venga chiusa. Il comando Commit viene utilizzato per salvare la modifica in modo permanente nella memoria senza la fine della sessione.
Sintassi:
COMMIT;
Se si dispone di un database esistente nel sistema, utilizzare quel database esistente o creare un nuovo database. Utilizzeremo il database esistente Company.
USE Company
Considera le tabelle dei dipendenti già esistenti che contengono determinati dati:
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FM | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FM | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | PROVA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FM | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
In SQL, la query START TRANSACTION viene utilizzata per iniziare la transazione.
START TRANSACTION;
Ora inseriremo due record nella tabella Dipendenti esistente. Per inserire più record, utilizzeremo la seguente istruzione:
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);
Utilizzeremo ora la query SELECT per verificare se i record sono stati inseriti correttamente o meno nella tabella.
SELECT * FROM EMPLOYEES;
Risultato sulla query precedente:
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FM | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FM | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | PROVA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FM | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
4002 | ASHWINI | BAGAGLIO | 54500 | JAIPUR | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | PROVA | 4 |
L'output mostra che tutti i record sono stati inseriti correttamente.
Per salvare l'operazione INSERT sulla tabella Employees, eseguiremo il comando COMMIT.
COMMIT;
In SQL, per impostazione predefinita, il commit automatico è attivo. Per disattivare il commit automatico nell'SQL, imposta il valore del commit automatico su 0.
Aggiorneremo l'ID dipendente 4002 e imposteremo la città come 'Noida. Utilizza la query seguente per aggiornare il record del dipendente.
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;
Utilizzeremo ora la query SELECT per verificare se il record è stato aggiornato correttamente o meno nella tabella.
SELECT * FROM EMPLOYEES;
Risultato sulla query precedente:
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FM | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FM | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | PROVA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FM | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
4002 | ASHWINI | BAGAGLIO | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | PROVA | 4 |
Come possiamo vedere nell'output, l'ID dipendente 4002 città è stato modificato.
Per salvare le modifiche sulla tabella dei dipendenti, scriveremo un comando COMMIT.
COMMIT;
Ora elimineremo l'ID dipendente 4003 dalla tabella Impiegati. Utilizza la query seguente per eliminare il record del dipendente.
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;
Utilizzeremo ora la query SELECT per verificare se il record è stato eliminato correttamente o meno nella tabella.
SELECT * FROM EMPLOYEES;
Risultato sulla query precedente:
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FM | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FM | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | PROVA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FM | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
4002 | ASHWINI | BAGAGLIO | 54500 | NOIDA | JAVA | 3 |
L'output conferma che abbiamo eliminato i dettagli dell'ID dipendente 4003.
Per salvare le modifiche sulla tabella dei dipendenti, scriveremo un comando COMMIT.
COMMIT;
Comando SAVEPOINT
Le operazioni di database eseguite possono essere suddivise in due parti. Ad esempio, considera tutte le istruzioni di eliminazione che abbiamo eseguito come un segmento della transazione e l'istruzione di aggiornamento come un segmento della transazione. Per salvare le query di inserimento nella parte di inserimento ed eliminare le query nella parte di eliminazione della stessa transazione, utilizziamo il comando SAVEPOINT in SQL. Supponiamo di voler salvare tutte le query relative all'eliminazione con il punto di salvataggio denominato delete. Per salvare tutte le operazioni relative all'eliminazione in un punto di salvataggio, dobbiamo eseguire il comando SAVEPOINT seguito dal nome del punto di salvataggio dopo aver eseguito la query di eliminazione.
Sintassi:
SAVEPOINT savepoint name;
Comando ROLLBACK
Durante l'esecuzione di una transazione, abbiamo creato i punti di salvataggio per salvare i diversi segmenti della transazione. Quando i requisiti dell'utente cambiano, l'utente può annullare la transazione in diversi punti di salvataggio. Considera uno scenario:abbiamo avviato una transazione seguita dalla creazione della tabella e dall'inserimento del record nella tabella. Abbiamo creato l'INS denominato savepoint dopo aver aggiunto i record alla tabella. Dopo l'inserimento, abbiamo eseguito l'operazione di eliminazione e in seguito ci siamo ricordati di aver eliminato per errore i record errati. Annulleremo la nostra transazione per raggiungere il punto di salvataggio INS. Per annullare la transazione, utilizzare il comando ROLLBACK.
Possiamo ripristinare l'operazione che abbiamo eseguito o ripristinare l'intera transazione del punto di salvataggio.
Sintassi per eseguire il rollback dell'operazione:
ROLLBACK;
Sintassi per eseguire il rollback della transazione:
ROLLBACK TO savepoint;
Esempi dei comandi SAVEPOINT e ROLLBACK:
Se si dispone di un database esistente nel sistema, utilizzare quel database esistente o creare un nuovo database. Selezioneremo il database già esistente denominato Company.
USE Company
Considera le tabelle dei dipendenti esistenti che hanno i seguenti record:
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FM | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FM | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | PROVA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FM | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
4002 | ASHWINI | BAGAGLIO | 54500 | NOIDA | JAVA | 3 |
In SQL, la query START TRANSACTION viene utilizzata per iniziare la transazione.
START TRANSACTION;
Ora inseriremo due record nella tabella Dipendenti esistente. Per inserire più record utilizzeremo la seguente dichiarazione:
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);
Utilizzeremo ora la query SELECT per verificare se i record sono stati inseriti correttamente o meno nella tabella.
SELECT * FROM EMPLOYEES;
Risultato sulla query precedente:
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FM | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FM | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | PROVA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FM | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
4002 | ASHWINI | BAGAGLIO | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | PROVA | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Come tutti sappiamo, il comando SAVEPOINT in SQL viene utilizzato per salvare parti diverse della stessa transazione. Supponiamo che l'inserimento sia un segmento della nostra transazione. Usa savepoint per salvare questo segmento di inserimento come Inserimento.
SAVEPOINT Insertion;
Ora eseguiremo l'operazione di AGGIORNAMENTO sulle tabelle Impiegato e aggiorneremo lo stipendio del dipendente di 1,2 per l'ID dipendente 2003.
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;
Verificheremo l'operazione di aggiornamento eseguendo la query SELECT nella tabella Employees:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
2003 | RUCHIKA | JAIN | 60000 | MUMBAI | PROVA | 4 |
I risultati della query precedenti mostrano che il record ID dipendente 2003 è stato aggiornato correttamente.
Considera la query di aggiornamento come un segmento della nostra transazione. Salveremo la parte dell'operazione di aggiornamento utilizzando un SAVEPOINT denominato Aggiornamento.
SAVEPOINT Updation;
Ora eseguiremo un'operazione di eliminazione sulla tabella Impiegati. Effettueremo un'operazione di eliminazione sulla tabella dei dipendenti in cui lo stipendio dei dipendenti è maggiore di 60000.
DELETE FROM EMPLOYEES WHERE SALARY > 60000;
Verificheremo l'operazione di eliminazione eseguendo la query SELECT nella tabella Employees:
SELECT * FROM EMPLOYEES;
Risultato sulla query precedente:
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FM | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2003 | RUCHIKA | JAIN | 60000 | MUMBAI | PROVA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FM | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4002 | ASHWINI | BAGAGLIO | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | PROVA | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
La query precedente mostra che l'eliminazione dei record dei dipendenti è riuscita.
Considera le query di eliminazione come un segmento della nostra transazione. Salveremo la parte dell'operazione di aggiornamento utilizzando un SAVEPOINT denominato Eliminazione.
SAVEPOINT Deletion;
Improvvisamente l'utente si è reso conto che la query che volevamo eseguire sull'operazione di eliminazione non doveva essere quella query. In tale situazione, gli utenti torneranno all'intera transazione al SAVEPOINT; l'Utente può tornare a qualsiasi SAVEPOINT che desidera ripristinare come Inserimento, Aggiornamento SAVEPOINT.
ROLLBACK TO Insertion;
Se l'utente non desidera rimuovere i record. Pertanto, l'Utente verrà riportato al SAVEPOINT di inserimento.
Per verificare in modo incrociato di avere la stessa tabella dei dipendenti che avevamo prima di eseguire le operazioni di aggiornamento ed eliminazione. Per recuperare i dettagli dei dipendenti, eseguire l'operazione SELECT sulla tabella dei dipendenti.
SELECT * FROM EMPLOYEES;
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FM | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FM | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | PROVA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FM | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
4002 | ASHWINI | BAGAGLIO | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | PROVA | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |