2.5 DTL
El DTL (Data Transaction Language) es un subconjunto de SQL que se utiliza para gestionar transacciones en bases de datos relacionales. Permite agrupar múltiples operaciones de manipulación de datos (DML) en una única transacción, asegurando que todas las operaciones se completen correctamente o ninguna lo haga. Esto es esencial para mantener la integridad de los datos y evitar inconsistencias.
Transacciones
Una transacción es una secuencia de operaciones que se ejecutan como una unidad lógica. Las transacciones tienen cuatro propiedades fundamentales, conocidas como ACID:
- Atomicidad: Todas las operaciones dentro de una transacción se completan con éxito o ninguna se aplica. Si alguna operación falla, todas las anteriores se deshacen.
- Consistencia: La base de datos pasa de un estado válido a otro estado válido. Las reglas de integridad se mantienen.
- Aislamiento: Las transacciones concurrentes no afectan entre sí. Cada transacción se ejecuta como si fuera la única en el sistema.
- Durabilidad: Una vez que una transacción se ha completado, sus cambios son permanentes, incluso en caso de fallos del sistema.
- Persistencia: Los cambios realizados por una transacción se guardan de forma permanente en la base de datos.
- Visibilidad: Los cambios realizados por una transacción son visibles para otras transacciones solo después de que la transacción se haya completado.
Comandos DTL
Los comandos DTL más comunes son:
BEGIN TRANSACTION
: Inicia una nueva transacción.COMMIT
: Confirma la transacción, aplicando todos los cambios realizados.ROLLBACK
: Deshace todos los cambios realizados en la transacción actual, volviendo al estado anterior a su inicio.SAVEPOINT
: Crea un punto de guardado dentro de una transacción, permitiendo deshacer solo hasta ese punto sin afectar al resto de la transacción.SET TRANSACTION
: Configura las propiedades de la transacción, como el nivel de aislamiento.LOCK TABLE
: Bloquea una tabla para evitar que otras transacciones la modifiquen mientras se está trabajando con ella.UNLOCK TABLE
: Libera el bloqueo de una tabla, permitiendo que otras transacciones la modifiquen.SET AUTOCOMMIT
: Configura el modo de autocommit de la transacción, determinando si las transacciones se confirman automáticamente después de cada operación DML.SET ISOLATION LEVEL
: Establece el nivel de aislamiento de la transacción, que determina cómo se manejan las transacciones concurrentes y su visibilidad mutua.SET TRANSACTION NAME
: Asigna un nombre a la transacción, lo que puede ser útil para identificarla en registros o auditorías.SET TRANSACTION READ ONLY
: Configura la transacción para que sea de solo lectura, lo que significa que no se permiten operaciones DML (INSERT, UPDATE, DELETE) dentro de ella.SET TRANSACTION READ WRITE
: Configura la transacción para que permita operaciones DML, lo que significa que se pueden realizar inserciones, actualizaciones y eliminaciones de datos.
Ejemplo de uso de DTL
BEGIN TRANSACTION;
INSERT INTO cuentas (usuario, saldo) VALUES ('usuario1', 1000);
UPDATE cuentas SET saldo = saldo - 100 WHERE usuario = 'usuario1';
UPDATE cuentas SET saldo = saldo + 100 WHERE usuario = 'usuario2';
COMMIT;
En este ejemplo se inicia una transacción que inserta un nuevo registro en la tabla cuentas
y actualiza los saldos de dos usuarios. Si todas las operaciones se completan con éxito, se confirma la transacción con COMMIT
. Si alguna operación falla, se podría usar ROLLBACK
para deshacer todos los cambios realizados hasta ese momento:
INSERT INTO cuentas (usuario, saldo) VALUES ('usuario1', 1000);
INSERT INTO cuentas (usuario, saldo) VALUES ('usuario2', 500);
BEGIN TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE usuario = 'usuario1';
UPDATE cuentas SET saldo = saldo + 100 WHERE usuario = 'usuario2';
IF @@ERROR <> 0
BEGIN
ROLLBACK;
END
ELSE
BEGIN
COMMIT;
END