COMMIT TRANSACTION Marca el final de una transacción correcta, implícita o explícita. Si @@TRANCOUNT es 1, COMMIT TRANSACTION hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transacción sean parte permanente de la base de datos, libera los recursos mantenidos por la transacción y reduce @@TRANCOUNT a 0. Si @@TRANCOUNT es mayor que 1, COMMIT TRANSACTION solo reduce @@TRANCOUNT en 1 y la transacción sigue activa.Sintaxis COMMIT [ { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ] [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ] [ ; ]
Slide 2
SENTENCIAS PARA TRANSACCIONES
COMMIT TRANSACTION Argumentostransaction_nameMotor de base de datos de SQL Server lo omite. transaction_name especifica un nombre de transacción asignado a una instrucción BEGIN TRANSACTION anterior. transaction_name debe cumplir con las reglas para identificadores, pero no puede superar los 32 caracteres. transaction_name se puede usar como una ayuda de legibilidad, ya que indica a los programadores a qué instrucción BEGIN TRANSACTION anidada está asociada la instrucción COMMIT TRANSACTION.@tran_name_variableSe trata del nombre de una variable definida por el usuario que contiene un nombre de transacción válido. La variable debe declararse con un tipo de datos char, varchar, nchar o nvarchar. Si se pasan más de 32 caracteres a la variable, solo se usarán 32 caracteres; el resto de los caracteres se truncarán.DELAYED_DURABILITYLa opción que solicita esta transacción se confirma con la durabilidad diferida. Se omitirá la solicitud si la base de datos se ha modificado con DELAYED_DURABILITY = DISABLED o DELAYED_DURABILITY = FORCED. Vea el tema Controlar la durabilidad de las transacciones para obtener más información.
Slide 3
SENTENCIAS PARA TRANSACCIONES
COMMIT TRANSACTIONEn el siguiente ejemplo se elimina a un candidato a un puesto de trabajo.
USE AdventureWorks2012;
GO
BEGIN TRANSACTION;
GO
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION;
GO
Confirmar una transacción
Slide 4
SENTENCIAS PARA TRANSACCIONES
Sentencia RollbackEn tecnologías de base de datos, un rollback o reversión es una operación que devuelve a la base de datos a algún estado previo. Los Rollbacks son importantes para laintegridad de la base de datos, a causa de que significan que la base de datos puede ser restaurada a una copia limpia incluso después de que se han realizado operaciones erróneas. Son cruciales para la recuperación de crashes de un servidor de base de datos; realizando rollback(devuelto) cualquier transacción que estuviera activa en el tiempo del crash, la base de datos es restaurada a un estado consistente.En SQL, ROLLBACK es un comando que causa que todos los cambios de datos desde la última sentencia BEGIN WORK, o START TRANSACTION sean descartados por el sistema de gestión de base de datos relacional (RDBMS), para que el estado de los datos sea "rolled back"(devuelto) a la forma en que estaba antes de que aquellos cambios tuvieran lugar.Una sentencia ROLLBACK también publicará cualquier savepoint existente que puediera estar en uso.En muchos dialectos de SQL, ROLLBACKs son específicos de la conexión. Esto significa que si se hicieron dos conexiones a la misma base de datos, un ROLLBACK hecho sobre una conexión no afectará a cualesquiera otras conexiones. Esto es vital para el buen funcionamiento de la Concurrencia.
Sentencia RollbackArgumentostransaction_nameEs el nombre asignado a la transacción en BEGIN TRANSACTION. transaction_name debe ajustarse a las reglas para los identificadores, pero solo se usan los 32 primeros caracteres del nombre de la transacción. Cuando se anidan transacciones, transaction_name debe ser el nombre de la instrucción BEGIN TRANSACTION más externa. transaction_name siempre distingue mayúsculas de minúsculas, incluso cuando la instancia de SQL Server no distingue mayúsculas de minúsculas.@ tran_name_variableNombre de una variable definida por el usuario que contiene un nombre de transacción válido. La variable se debe declarar con un tipo de datos char, varchar, nchar o nvarchar.savepoint_nameEs savepoint_name de una instrucción SAVE TRANSACTION. savepoint_name debe ajustarse a las reglas para los identificadores. Utilicesavepoint_name cuando una operación de reversión condicional solo deba afectar a parte de la transacción.@ savepoint_variableEs el nombre de una variable definida por el usuario que contiene un nombre de punto de retorno válido. La variable debe declararse con un tipo de datos char, varchar, nchar o nvarchar.
Slide 7
SENTENCIAS PARA TRANSACCIONES
Sentencia RollbackEn el ejemplo siguiente se muestra el efecto de revertir una transacción con nombre.
USE tempdb;
GO
CREATE TABLE ValueTable ([value] int;)
GO
DECLARE @TransactionName varchar(20) = 'Transaction1';
--The following statements start a named transaction,
--insert two rows, and then roll back
--the transaction named in the variable @TransactionName.
--Another statement outside of the named transaction inserts two rows.
--The query returns the results of the previous statements.
BEGIN TRAN @TransactionName
INSERT INTO ValueTable VALUES(1), (2);
ROLLBACK TRAN @TransactionName;
INSERT INTO ValueTable VALUES(3),(4);
SELECT [value] FROM ValueTable;
DROP TABLE ValueTable;
--Results
--value
-------------
--3
--4
Slide 8
SENTENCIAS PARA TRANSACCIONES
Sentencia Save PointLa sentencia SAVEPOINT inicia una nueva transacción con un nombre. Es necesario que los nombres de transacción sean únicos. Un SAVEPOINTpuede ser iniciado tanto dentro como fuera de un BEGIN... COMMIT. Cuando un SAVEPOINT es el más exterior y no está en el interior de unBEGIN...COMMIT, entonces sl comportamiento es el mismo que BEGIN DEFERRED TRANSACTION.El comando SAVEPOINT crea un punto dentro de una transacción con un nombre identifier. Si la transacción actual tiene un punto con el mismo nombre, el antiguo se borra y se crea el nuevo. Invocación Esta sentencia puede incorporarse en un programa de aplicación (también en procedimientos) o emitirse de forma interactiva. Se trata de una sentencia ejecutable que puede prepararse de forma dinámica.
Slide 9
SENTENCIAS PARA TRANSACCIONES
Sentencia Save Point Sintaxis
>>-SAVEPOINT--nombre-punto-salvaguarda--+--------+-------------->
'-UNIQUE-'
.-ON ROLLBACK RETAIN LOCKS-.
>--ON ROLLBACK RETAIN CURSORS--+--------------------------+----><
Slide 10
SENTENCIAS PARA TRANSACCIONES
Sentencia Save PointDescripciónnombre-punto-salvaguardaEspecifica el nombre de un punto de salvaguarda. El nombre-puntosalvaguarda no puede empezar por 'SYS' (SQLSTATE 42939). Si ya se ha definido un punto de salvaguarda con este nombre como UNIQUE dentro de este nivel de punto de salvaguarda, se devuelve un error (SQLSTATE 3B501).UNIQUEEspecifica que la aplicación no tiene la intención de volver a utilizar este nombre de punto de salvaguarda mientras la salvaguarda esté activa en el nivel de salvaguarda actual. Si ya existe un savepoint-name dentro de este nivel de punto de salvaguarda, se devuelve un error (SQLSTATE 3B501).ON ROLLBACK RETAIN CURSORSEspecifica la respuesta del sistema al realizar una retrotracción hasta este punto de salvaguarda, con respecto a las sentencias OPEN CURSOR procesadas después de la sentencia SAVEPOINT. Esta cláusula indica que, siempre que es posible, los cursores no se ven afectados por una retrotracción en una operación de punto de salvaguarda. Para situaciones en las que los cursores se vean afectados por la retrotracción en el punto de salvaguarda, consulte "ROLLBACK".ON ROLLBACK RETAIN LOCKSEspecifica la respuesta del sistema al realizar una retrotracción hasta este punto de salvaguarda, con respecto a los bloqueos adquiridos después de definir el punto de salvaguarda. No se hace un seguimiento de los bloqueos adquiridos a partir del punto de salvaguarda y no se retrotraen (liberan) al retrotraer hasta el punto de salvaguarda.
Slide 11
SENTENCIAS PARA TRANSACCIONES
Sentencia Save Point Ejemplo:Realizar una operación de retrotracción para los puntos de salvaguarda anidados. Primero, cree una tabla denominada DEPARTMENT. Inserte una fila antes de iniciar SAVEPOINT1; inserte otra fila e inicie SAVEPOINT2; después, inserte una tercera fila e inicie SAVEPOINT3. CREATE TABLE DEPARTMENT (
DEPTNO CHAR(6),
DEPTNAME VARCHAR(20),
MGRNO INTEGER)
INSERT INTO DEPARTMENT VALUES ('A20', 'MARKETING', 301)
SAVEPOINT SAVEPOINT1 ON ROLLBACK RETAIN CURSORS
INSERT INTO DEPARTMENT VALUES ('B30', 'FINANCE', 520)
SAVEPOINT SAVEPOINT2 ON ROLLBACK RETAIN CURSORS
INSERT INTO DEPARTMENT VALUES ('C40', 'IT SUPPORT', 430)
SAVEPOINT SAVEPOINT3 ON ROLLBACK RETAIN CURSORS
INSERT INTO DEPARTMENT VALUES ('R50', 'RESEARCH', 150) En este momento, la tabla DEPARTMENT existe con las filas A20, B30, C40 y R50. Si ahora emite: ROLLBACK TO SAVEPOINT SAVEPOINT3 la fila R50 ya no estará en la tabla DEPARTMENT. Si después emite: ROLLBACK TO SAVEPOINT SAVEPOINT1 la tabla DEPARTMENT todavía existirá, pero las filas insertadas desde que se ha establecido SAVEPOINT1 (B30 y C40) ya no estarán en la tabla.
Slide 12
SENTENCIAS PARA TRANSACCIONES
Sentencia SET TRANSACTIONAsigna el nivel de aislamiento de transacción para transacciones globales, la sesión completa o para la siguiente transacción.El comportamiento por defecto es asignar el nivel de aislamiento para la siguiente transacción (no comenzada). Si se usa GLOBAL, la sentencia asigna el nivel de transacción global por defecto para todas las nuevas conexiones creadas desde ese punto (pero no para las conexiones existentes). Se necesita el privilegioSUPER para hacer esto. Usando la opción SESSION se asigna el nivel de transacción por defecto para todas las futuras transacciones realizadas en la conexión actual.
Slide 13
SENTENCIAS PARA TRANSACCIONES
Sentencia SET TRANSACTIONSintaxis:^ SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
\
Ejemplo:
SET [GLOBAL | SESSION] sql_variable=expression,
[[GLOBAL | SESSION] sql_variable=expression] ... SET activa varias opciones que afectan al funcionamiento del servidor y el cliente.Los siguientes ejemplos muestran las diferentes sintaxis que se pueden usar para modificar variables:En versiones antiguas de MySQL está permitido usar la sintaxis SET OPTION, pero esto está desaconsejado ahora.En MySQL 4.0.3 se han añadido las opciones GLOBAL y SESSION y acceso a las variables de arranque más importantes.