En lenguaje de consulta estructurado, TCL es una abreviatura de lenguaje de control de transacciones. Una sola unidad de trabajo en una base de datos se forma después de la ejecución consecutiva de comandos que se conoce como transacción.
Hay algunos comandos en el lenguaje de consulta estructurado, y el comando del lenguaje de control de transacciones es uno de los comandos SQL. Los comandos TCL manejan las transacciones en una base de datos
En el Lenguaje de consulta estructurado, Confirmar, Revertir y Punto de guardado son los comandos del Lenguaje de control de transacciones ampliamente utilizados en SQL.
Ahora comprendamos y aprendamos cómo funcionan los comandos del lenguaje de control de transacciones en el lenguaje de consulta estructurada con la ayuda de algunos ejemplos. Los comandos del lenguaje de control de transacciones son:
- Comando COMMIT
- Comando ROLLBACK
- Comando SALVAR PUNTO
Comando COMMIT
Commit Command en SQL se usa para guardar todas las transacciones que cambian permanentemente en el disco. Cada vez que realizamos la operación en los comandos del lenguaje de definición de datos (DDL), como el comando INSERTAR, el comando ACTUALIZAR y el comando ELIMINAR, las modificaciones realizadas por estos comandos son permanentes, pero antes de cerrar la sesión actual o hasta el final de la sesión. Podemos deshacer fácilmente la operación que realizamos usando el lenguaje de definición de datos antes de que se cierre la sesión. El comando Confirmar se usa para guardar la modificación de forma permanente en el almacenamiento sin que finalice la sesión.
Sintaxis:
COMMIT;
Si tiene una base de datos existente en el sistema, use esa base de datos existente o cree una nueva base de datos. Usaremos la base de datos existente Empresa.
USE Company
Considere las tablas de empleados ya existentes que tienen ciertos datos:
ID DE EMPLEADO | FIRST_NAME | APELLIDO | SALARIO | CIUDAD | DEPARTAMENTO | ID DE ADMINISTRADOR |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACULO | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACULO | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACULO | 1 |
2002 | BHAVESH | JAÍN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAÍN | 50000 | BOMBAY | PRUEBA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | BOMBAY | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | BOMBAY | PRUEBA | 4 |
En SQL, la consulta START TRANSACTION se usa para comenzar la transacción.
START TRANSACTION;
Ahora, insertaremos dos registros en la tabla Empleados existente. Para insertar múltiples registros, usaremos la siguiente declaración:
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);
Ahora usaremos la consulta SELECT para verificar si los registros se insertaron correctamente o no en la tabla.
SELECT * FROM EMPLOYEES;
Resultado de la consulta anterior:
ID DE EMPLEADO | FIRST_NAME | APELLIDO | SALARIO | CIUDAD | DEPARTAMENTO | ID DE ADMINISTRADOR |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACULO | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACULO | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACULO | 1 |
2002 | BHAVESH | JAÍN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAÍN | 50000 | BOMBAY | PRUEBA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | BOMBAY | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | BOMBAY | PRUEBA | 4 |
4002 | ASHWINI | BAGHAT | 54500 | JAIPUR | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | PRUEBA | 4 |
El resultado muestra que todos los registros se insertaron correctamente.
Para guardar la operación INSERTAR en la tabla Empleados, ejecutaremos el comando COMMIT.
COMMIT;
En SQL, de forma predeterminada, la confirmación automática está activada. Para desactivar la confirmación automática en SQL, establezca el valor de confirmación automática en 0.
Actualizaremos la identificación del empleado 4002 y estableceremos la ciudad como 'Noida. Use la consulta a continuación para actualizar el registro del empleado.
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;
Ahora usaremos la consulta SELECT para verificar si el registro se actualizó correctamente o no en la tabla.
SELECT * FROM EMPLOYEES;
Resultado de la consulta anterior:
ID DE EMPLEADO | FIRST_NAME | APELLIDO | SALARIO | CIUDAD | DEPARTAMENTO | ID DE ADMINISTRADOR |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACULO | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACULO | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACULO | 1 |
2002 | BHAVESH | JAÍN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAÍN | 50000 | BOMBAY | PRUEBA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | BOMBAY | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | BOMBAY | PRUEBA | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | PRUEBA | 4 |
Como podemos ver en el resultado, se modificó la ciudad del Id. de empleado 4002.
Para guardar los cambios en la tabla de empleados, escribiremos un comando COMMIT.
COMMIT;
Ahora, eliminaremos la identificación del empleado 4003 de la tabla Empleados. Utilice la consulta a continuación para eliminar el registro de empleado.
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;
Ahora usaremos la consulta SELECT para verificar si el registro se eliminó con éxito o no en la tabla.
SELECT * FROM EMPLOYEES;
Resultado de la consulta anterior:
ID DE EMPLEADO | FIRST_NAME | APELLIDO | SALARIO | CIUDAD | DEPARTAMENTO | ID DE ADMINISTRADOR |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACULO | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACULO | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACULO | 1 |
2002 | BHAVESH | JAÍN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAÍN | 50000 | BOMBAY | PRUEBA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | BOMBAY | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | BOMBAY | PRUEBA | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
El resultado confirma que eliminamos los detalles del ID de empleado 4003.
Para guardar los cambios en la tabla de empleados, escribiremos un comando COMMIT.
COMMIT;
Comando SALVAR PUNTO
Las operaciones de base de datos realizadas se pueden dividir en dos partes. Por ejemplo, considere todas las declaraciones de eliminación que realizamos como un segmento de la transacción y la declaración de actualización como un segmento de la transacción. Para guardar consultas de inserción en la parte de inserción y eliminar consultas en la parte de eliminación de la misma transacción, usamos el comando SAVEPOINT en SQL. Supongamos que queremos guardar todas las consultas relacionadas con la eliminación con el punto de guardado llamado eliminar. Para guardar todas las operaciones relacionadas con la eliminación en un punto de guardado, debemos ejecutar el comando SAVEPOINT seguido del nombre del punto de guardado después de realizar la consulta de eliminación.
Sintaxis:
SAVEPOINT savepoint name;
comando ROLLBACK
Mientras realizamos una transacción, construimos los puntos de guardado para guardar los diferentes segmentos de la transacción. A medida que cambian los requisitos del Usuario, el Usuario puede deshacer la transacción a diferentes puntos de guardado. Considere un escenario:hemos iniciado una transacción seguida de la creación de la tabla y la inserción del registro en la tabla. Construimos el INS llamado savepoint después de agregar registros a la tabla. Después de la inserción, realizamos la operación de eliminación y luego recordamos que eliminamos por error los registros incorrectos. Desharemos nuestra transacción para llegar al punto de guardado INS. Para deshacer la transacción, use el comando ROLLBACK.
Podemos revertir la operación que realizamos o revertir toda la transacción del punto de guardado.
Sintaxis para deshacer la operación:
ROLLBACK;
Sintaxis para deshacer la transacción:
ROLLBACK TO savepoint;
Ejemplos de los comandos SAVEPOINT y ROLLBACK:
Si tiene una base de datos existente en el sistema, use esa base de datos existente o cree una nueva base de datos. Seleccionaremos la base de datos ya existente denominada Empresa.
USE Company
Considere las tablas de empleados existentes que tienen los siguientes registros:
ID DE EMPLEADO | FIRST_NAME | APELLIDO | SALARIO | CIUDAD | DEPARTAMENTO | ID DE ADMINISTRADOR |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACULO | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACULO | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACULO | 1 |
2002 | BHAVESH | JAÍN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAÍN | 50000 | BOMBAY | PRUEBA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | BOMBAY | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | BOMBAY | PRUEBA | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
En SQL, la consulta START TRANSACTION se usa para comenzar la transacción.
START TRANSACTION;
Ahora, insertaremos dos registros en la tabla Empleados existente. Para insertar múltiples registros, usaremos la siguiente declaración:
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);
Ahora usaremos la consulta SELECT para verificar si los registros se insertaron correctamente o no en la tabla.
SELECT * FROM EMPLOYEES;
Resultado de la consulta anterior:
ID DE EMPLEADO | FIRST_NAME | APELLIDO | SALARIO | CIUDAD | DEPARTAMENTO | ID DE ADMINISTRADOR |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACULO | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACULO | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACULO | 1 |
2002 | BHAVESH | JAÍN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAÍN | 50000 | BOMBAY | PRUEBA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | BOMBAY | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | BOMBAY | PRUEBA | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | PRUEBA | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Como todos sabemos, el comando SAVEPOINT en SQL se usa para guardar diferentes partes de la misma transacción. Supongamos que la inserción es un segmento de nuestra transacción. Use savepoint para guardar este segmento de inserción como Inserción.
SAVEPOINT Insertion;
Ahora, realizaremos la operación ACTUALIZAR en las tablas de Empleados y actualizaremos el salario del empleado en 1,2 para la identificación del empleado 2003.
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;
Cotejaremos la operación de actualización ejecutando la consulta SELECT en la tabla Empleados:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
ID DE EMPLEADO | FIRST_NAME | APELLIDO | SALARIO | CIUDAD | DEPARTAMENTO | ID DE ADMINISTRADOR |
2003 | RUCHIKA | JAÍN | 60000 | BOMBAY | PRUEBA | 4 |
Los resultados de la consulta anterior muestran que el registro de identificación de empleado 2003 se actualizó correctamente.
Considere la consulta de actualización como un segmento de nuestra transacción. Guardaremos la parte de la operación de actualización usando un SAVEPOINT llamado Actualización.
SAVEPOINT Updation;
Ahora, realizaremos una operación de eliminación en la tabla Empleados. Realizaremos la operación de eliminación en la tabla de empleados donde el salario del empleado sea superior a 60000.
DELETE FROM EMPLOYEES WHERE SALARY > 60000;
Verificaremos la operación de eliminación ejecutando la consulta SELECT en la tabla Empleados:
SELECT * FROM EMPLOYEES;
Resultado de la consulta anterior:
ID DE EMPLEADO | FIRST_NAME | APELLIDO | SALARIO | CIUDAD | DEPARTAMENTO | ID DE ADMINISTRADOR |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACULO | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACULO | 1 |
2003 | RUCHIKA | JAÍN | 60000 | BOMBAY | PRUEBA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | BOMBAY | JAVA | 3 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | PRUEBA | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
La consulta anterior muestra que la eliminación de los registros de empleados fue exitosa.
Considere las consultas de eliminación como un segmento de nuestra transacción. Guardaremos la parte de la operación de actualización usando un SAVEPOINT llamado Eliminación.
SAVEPOINT Deletion;
De repente, el usuario se dio cuenta de que la consulta que queríamos realizar en la operación de eliminación no debía ser esa consulta. En tal situación, los usuarios retrocederán a la transacción completa al SAVEPOINT; el usuario puede retroceder a cualquier SAVEPOINT que desee, como inserción, actualización SAVEPOINT.
ROLLBACK TO Insertion;
Si el usuario no quiere eliminar los registros. Por lo tanto, el Usuario será retrocedido al SAVEPOINT de Inserción.
Para cotejar que tenemos la misma tabla de empleados que teníamos antes de realizar las operaciones de actualización y borrado. Para recuperar los detalles de los empleados, realice la operación SELECCIONAR en la tabla de empleados.
SELECT * FROM EMPLOYEES;
ID DE EMPLEADO | FIRST_NAME | APELLIDO | SALARIO | CIUDAD | DEPARTAMENTO | ID DE ADMINISTRADOR |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACULO | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACULO | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACULO | 1 |
2002 | BHAVESH | JAÍN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAÍN | 50000 | BOMBAY | PRUEBA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | BOMBAY | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | BOMBAY | PRUEBA | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | PRUEBA | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |