Saltar al contenido principal

TCL (Transaction Control Lenguage)

¿Que es TCL?

Es un subconjunto del lenguaje SQL que se usa para controlar las transacciones en una base de datos.

Una transacción es un conjunto de operaciones SQL que se ejecutan como una unidad. O todas se completan, o ninguna se aplica (esto asegura la integridad de los datos).

¿Por que usar TCL?

  • Garantizar la atomicidad de las operaciones
  • Mantener la consistencia de los datos
  • Controlar errores
  • Mejorar la confiabilidad
  • Permite dividir las operaciones en pasos controlados

Usos comunes de TCL

  • Confirmar cambios en la base de datos (con COMMIT).
  • Revertir cambios si algo falla (con ROLLBACK).
  • Definir puntos intermedios en una transacción para deshacer parcialmente (con SAVEPOINT).
  • Configurar propiedades de las transacciones (con SET TRANSACTION).

Como usar TCL

Inicio de la transaccion

BEGIN TRANSACTION;

Ejecutar operaciones SQL

UPDATE Cuenta SET saldo = saldo - 100 WHERE id = 1;
UPDATE Cuenta SET saldo = saldo + 100 WHERE id = 2;

Confirmar la transacción con COMMIT

COMMIT;

Revertir la transacción con ROLLBACK

ROLLBACK;

Usar SAVEPOINT para puntos intermedios

SAVEPOINT punto1;

-- alguna operación que podría fallar

ROLLBACK TO punto1;

Ejemplo

  • Transferencia bancaria con TCL

Crear tabla simplificada de cuentas

CREATE TABLE Cuenta (
id INT PRIMARY KEY,
nombre VARCHAR(100),
saldo DECIMAL(10, 2)
);

INSERT INTO Cuenta (id, nombre, saldo) VALUES
(1, 'Ana', 1000.00),
(2, 'Luis', 500.00);

Transferencia con control de transacción

BEGIN TRANSACTION;

-- Restar 200 de Ana
UPDATE Cuenta SET saldo = saldo - 200 WHERE id = 1;

-- Sumar 200 a Luis
UPDATE Cuenta SET saldo = saldo + 200 WHERE id = 2;

-- Confirmar cambios
COMMIT;

Si algo falla, hacer rollback

BEGIN TRANSACTION;

UPDATE Cuenta SET saldo = saldo - 200 WHERE id = 1;

-- Verificamos saldo después de la resta
SELECT saldo FROM Cuenta WHERE id = 1;

-- Si saldo < 0, revertimos
-- Supongamos que con lógica en tu aplicación detectas el error y ejecutas:
ROLLBACK;

-- Si todo está bien, confirmas con:
-- COMMIT;