Está en la página 1de 2

BASE DE DATOS I

COMANDOS COMMIT – ROLLBACK - SAVEPOINT

Los comandos tratados anteriormente: INSERT, UPDATE y DELETE, se conocen como comandos
tipo DML (DATA MANIPULATION LANGUAGE) y a diferencia de los comandos como: CREATE
TABLE, CREATE USER, ALTER TABLE, ALTER USER, DROP TABLE, etc, que son de tipo DDL (DATA
DESCRIPTION LANGUAGE) requieren de comandos adicionales para ratificar la acción o para
deshacer la acción.

Para ratificar la acción existe el comando:

COMMIT;

Y para deshacer la acción el comando:

ROLLBACK;

Es importante tener presente que no es necesario un COMMIT por cada comando de tipo DML. Los
comandos COMMIT marcan el fin de una transacción que puede estar compuesta por múltiples
comandos DML. La frecuencia de la ejecución de comandos COMMIT depende del riesgo de perder
información durante una transacción, a mayor riesgo la frecuencia debe ser mayor.

El comando ROLLBACK deshace las modificaciones, inserciones o borrados presentados desde el


último COMMIT emitido. Véase el siguiente ejemplo:

INSERT INTO .....;


DELETE FROM .....;
INSERT INTO .....;
COMMIT;
UPDATE .....;
DELETE FROM .....;
INSERT INTO .....;
COMMIT;
INSERT INTO .....;
INSERT INTO .....;
ROLLBACK;

El ejemplo muestra al final de la transacción un comando ROLLBACK que solo deshace la acción
de las dos últimas inserciones, es decir, el campo de acción del ROLLBACK solo tiene efecto desde
el último COMMIT ejecutado.

Es práctica común marcar algunos puntos a través de la transacción con el propósito de poder
tener diferentes alcances con el ROLLBACK. Estas marcas son realizadas mediante el comando
SAVEPOINT. Véase el siguiente ejemplo:

INSERT INTO .....;


DELETE FROM .....;
INSERT INTO .....;
SAVEPOINT UNO;
UPDATE .....;
DELETE FROM .....;
INSERT INTO .....;
SAVEPOINT DOS;
INSERT INTO .....;
INSERT INTO .....;
ROLLBACK TO DOS;

Del ejemplo anterior, se puede observar inicialmente que las marcas son nombradas con una
etiqueta: UNO y DOS en el ejemplo (el nombre debe comenzar con una letra y no puede llevar
espacios en blanco), de tal manera que el ROLLBACK puede revertir las acciones realizadas hasta
la etiqueta referida en él.

Es así como, del ejemplo arriba mostrado: ROLLBACK TO DOS, revierte la acción de las dos
inserciones realizadas entre el punto marcado como DOS y el ROLLBACK a ese punto.

INSERT INTO .....;


DELETE FROM .....;
INSERT INTO .....;
SAVEPOINT UNO;
UPDATE .....;
DELETE FROM .....;
INSERT INTO .....;
SAVEPOINT DOS;
INSERT INTO .....;
INSERT INTO .....;
ROLLBACK TO UNO;

Ahora: ROLLBACK TO UNO, revierte la acción de todos los comandos contenidos entre la marca
UNO y el ROLLBACK a ese punto. En estos casos, cuando otra marca, SAVEPOINT DOS, se
encuentra entre las acciones a revertir, la marca es borrada.

INSERT INTO .....;


DELETE FROM .....;
INSERT INTO .....;
SAVEPOINT UNO;
UPDATE .....;
DELETE FROM .....;
INSERT INTO .....;
SAVEPOINT DOS;
INSERT INTO .....;
INSERT INTO .....;
ROLLBACK;

Ahora el ejemplo nos muestra la aplicación de un ROLLBACK que no hace referencia a ninguna
marca a pesar de la existencia de éstas. En estos casos la reversión se realiza sobre todos los
comandos DML desde el comando ROLLBACK hasta el último COMMIT encontrado, y todas las
marcas que se encuentren entre estos dos comandos son borradas. Para el caso del ejemplo
arriba mostrado todas las acciones son revertidas y las marcas UNO y DOS borradas.

De la misma manera, cuando se ratifican los cambios mediante el comando COMMIT, todas las
marcas establecidas antes del comando COMMIT son borradas, y cualquier intento de revertir
cambios hasta una marca que se encontraba antes del comando COMMIT generará error.

También podría gustarte