¿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
- 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.
- 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.
- Aislamiento: Las operaciones de una transacción deben ser invisibles para otras transacciones hasta que la transacción esté completa.
- 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
- START TRANSACTION: Inicia una nueva transacción.
- UPDATE cuentas SET saldo = saldo - 100 WHERE cuenta_id = 'A': Debita $100 de la cuenta A.
- UPDATE cuentas SET saldo = saldo + 100 WHERE cuenta_id = 'B': Acredita $100 a la cuenta B.
- 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
- Crea una tabla
cuentas
con las siguientes columnas:cuenta_id
(VARCHAR),saldo
(DECIMAL). - 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
- Cuenta A:
- 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
- Instrucción SELECT
- Filtrando datos con WHERE
- Ordenando datos con ORDER BY
- Limitando resultados con LIMIT
Módulo 3: Trabajando con múltiples tablas
Módulo 4: Filtrado avanzado de datos
- Usando LIKE para coincidencia de patrones
- Operadores IN y BETWEEN
- Valores NULL y IS NULL
- Agregando datos con GROUP BY
- Cláusula HAVING
Módulo 5: Manipulación de datos
Módulo 6: Funciones avanzadas de SQL
Módulo 7: Subconsultas y consultas anidadas
- Introducción a subconsultas
- Subconsultas correlacionadas
- EXISTS y NOT EXISTS
- Usando subconsultas en cláusulas SELECT, FROM y WHERE
Módulo 8: Índices y optimización de rendimiento
- Entendiendo los índices
- Creación y gestión de índices
- Técnicas de optimización de consultas
- Análisis del rendimiento de consultas
Módulo 9: Transacciones y concurrencia
- Introducción a las transacciones
- Propiedades ACID
- Instrucciones de control de transacciones
- Manejo de concurrencia