¿Qué es una transacción?

En el contexto de bases de datos, una transacción es una secuencia de operaciones que se ejecutan como una única unidad lógica de trabajo. Una transacción debe cumplir con las propiedades ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad) para garantizar la integridad de los datos, incluso en situaciones de fallo del sistema.

Propiedades ACID

  1. Atomicidad: Una transacción debe ser todo o nada. Si una parte de la transacción falla, toda la transacción falla y la base de datos se mantiene en su estado original.
  2. Consistencia: Una transacción debe llevar la base de datos de un estado válido a otro estado válido, manteniendo las reglas de integridad definidas.
  3. Aislamiento: Las operaciones de una transacción deben ser invisibles para otras transacciones hasta que la transacción esté completa.
  4. Durabilidad: Una vez que una transacción ha sido confirmada, los cambios realizados son permanentes, incluso en caso de fallo del sistema.

Ejemplo de una transacción

Imaginemos un escenario simple de transferencia de dinero entre dos cuentas bancarias. La transacción debe asegurarse de que el dinero se debite de una cuenta y se acredite en otra de manera atómica.

START TRANSACTION;

-- Debitar $100 de la cuenta A
UPDATE cuentas
SET saldo = saldo - 100
WHERE cuenta_id = 'A';

-- Acreditar $100 a la cuenta B
UPDATE cuentas
SET saldo = saldo + 100
WHERE cuenta_id = 'B';

COMMIT;

Explicación del código

  1. START TRANSACTION: Inicia una nueva transacción.
  2. UPDATE cuentas SET saldo = saldo - 100 WHERE cuenta_id = 'A': Debita $100 de la cuenta A.
  3. UPDATE cuentas SET saldo = saldo + 100 WHERE cuenta_id = 'B': Acredita $100 a la cuenta B.
  4. COMMIT: Confirma la transacción, haciendo permanentes los cambios.

Control de transacciones

COMMIT y ROLLBACK

  • COMMIT: Confirma la transacción, haciendo permanentes todos los cambios realizados.
  • ROLLBACK: Revierte todos los cambios realizados por la transacción, devolviendo la base de datos a su estado original antes de que la transacción comenzara.

Ejemplo con ROLLBACK

Supongamos que ocurre un error durante la transacción y necesitamos revertir los cambios:

START TRANSACTION;

-- Debitar $100 de la cuenta A
UPDATE cuentas
SET saldo = saldo - 100
WHERE cuenta_id = 'A';

-- Simulación de un error
-- SELECT 1/0; -- Esto causará un error de división por cero

-- Acreditar $100 a la cuenta B
UPDATE cuentas
SET saldo = saldo + 100
WHERE cuenta_id = 'B';

ROLLBACK;

En este caso, debido al error simulado, la transacción se revierte y ningún cambio se aplica a la base de datos.

Ejercicio práctico

Ejercicio 1: Transferencia de fondos

  1. Crea una tabla cuentas con las siguientes columnas: cuenta_id (VARCHAR), saldo (DECIMAL).
  2. Inserta dos registros en la tabla cuentas con los siguientes datos:
    • Cuenta A: cuenta_id = 'A', saldo = 1000
    • Cuenta B: cuenta_id = 'B', saldo = 500
  3. Escribe una transacción que transfiera $200 de la cuenta A a la cuenta B.

Solución

-- Crear la tabla cuentas
CREATE TABLE cuentas (
    cuenta_id VARCHAR(10) PRIMARY KEY,
    saldo DECIMAL(10, 2)
);

-- Insertar registros
INSERT INTO cuentas (cuenta_id, saldo) VALUES ('A', 1000.00);
INSERT INTO cuentas (cuenta_id, saldo) VALUES ('B', 500.00);

-- Iniciar la transacción
START TRANSACTION;

-- Debitar $200 de la cuenta A
UPDATE cuentas
SET saldo = saldo - 200
WHERE cuenta_id = 'A';

-- Acreditar $200 a la cuenta B
UPDATE cuentas
SET saldo = saldo + 200
WHERE cuenta_id = 'B';

-- Confirmar la transacción
COMMIT;

Retroalimentación sobre errores comunes

  • Olvidar COMMIT o ROLLBACK: Si no se confirma o revierte una transacción, los cambios no se aplicarán o revertirán, lo que puede llevar a inconsistencias.
  • Errores de concurrencia: Asegúrate de manejar adecuadamente las transacciones concurrentes para evitar problemas como bloqueos o condiciones de carrera.

Conclusión

En esta sección, hemos aprendido qué es una transacción, las propiedades ACID que debe cumplir y cómo controlar transacciones usando COMMIT y ROLLBACK. Estas habilidades son fundamentales para garantizar la integridad y consistencia de los datos en una base de datos. En la próxima sección, profundizaremos en las propiedades ACID y cómo se implementan en diferentes sistemas de bases de datos.

Curso de SQL

Módulo 1: Introducción a SQL

Módulo 2: Consultas básicas de SQL

Módulo 3: Trabajando con múltiples tablas

Módulo 4: Filtrado avanzado de datos

Módulo 5: Manipulación de datos

Módulo 6: Funciones avanzadas de SQL

Módulo 7: Subconsultas y consultas anidadas

Módulo 8: Índices y optimización de rendimiento

Módulo 9: Transacciones y concurrencia

Módulo 10: Temas avanzados

Módulo 11: SQL en la práctica

Módulo 12: Proyecto final

© Copyright 2024. Todos los derechos reservados