Transacciones
Gestión de Transacciones
Una transacción es una secuencia de una o más operaciones sobre una base de datos que deben ejecutarse como una unidad indivisible. El objetivo es asegurar que todas las operaciones se completen con éxito o, en caso de fallo, ninguna de ellas se aplique, manteniendo así la base de datos en un estado consistente.
Por ejemplo, en una transferencia bancaria, si falla el abono en una cuenta, se cancela el débito en la otra.
Las transacciones se gestionan mediante comandos como BEGIN TRANSACTION (para iniciar), COMMIT (para confirmar los cambios) y ROLLBACK (para deshacer los cambios en caso de error). Este mecanismo protege la base de datos frente a fallos parciales y situaciones de concurrencia, asegurando que los datos siempre reflejen una realidad válida y coherente.
Propiedades de una transacción (ACID)
Las transacciones garantizan propiedades fundamentales, conocidas por el acrónimo ACID:
| Propiedad | Significado breve |
|---|---|
| Atomicidad | Todas las operaciones se ejecutan o ninguna lo hace |
| Consistencia | El sistema pasa de un estado válido a otro |
| Isolación | No interfiere con otras transacciones simultáneas |
| Durabilidad | Una vez confirmada, el cambio permanece |
Comandos clave
Para controlar correctamente una transacción desde el código, necesitamos usar tres comandos clave:
- commit(): Confirma los cambios realizados por la transacción, haciéndolos permanentes.
- rollback(): Revierte todos los cambios realizados durante la transacción actual, volviendo al estado anterior.
Por defecto, muchas conexiones JDBC están en modo auto-commit, es decir, cada operación se ejecuta y confirma automáticamente. Para usar transacciones de forma manual, debes desactivar este modo:
Excepciones
El manejo de excepciones en las transacciones es absolutamente necesario para garantizar que los datos de la base de datos no queden en un estado inconsistente o corrupto cuando ocurre un error durante una operación.
Una transacción sin control de errores no es una transacción segura. Siempre hay que estar preparado para deshacer todo si algo sale mal.
Cuando realizamos varias operaciones dentro de una misma transacción (por ejemplo, una transferencia bancaria), pueden ocurrir errores como:
- un fallo de conexión,
- un ID incorrecto,
- un valor nulo inesperado,
- un error lógico como saldo insuficiente.
Si no controlamos esos errores, la base de datos podría:
- Aplicar solo algunas de las operaciones
- Dejar datos parcialmente modificados
- Generar resultados incorrectos para otros usuarios
Para evitarlo se utiliza un bloque try-catch que:
- Llama a commit() si todo sale bien
- Llama a rollback() si ocurre cualquier excepción
🔍 Ejecutar y Analizar: Implementación de una Transacción
Prueba el código de ejemplo y verifica que funciona correctamente.
Este método de ejemplo actualiza dos registros de forma segura dentro de una transacción.
Ejemplo con varias tablas
Vamos a modificar la BD_plantas. Para el siguiente ejemplo se han añadido a la BD las tablas jardinesy jardines_plantas cuya estructura es la siguiente:


Supongamos que queremos llevar varias unidades de una planta a un jardín. El programa debe actualizar el stock en la tabla plantas (restando las unidades correspondientes) y añadir un registro en la tabla jardines_plantas indicando el jadín, la planta y la cantidad.
Ambas operaciones deben realizarse juntas, o no realizarse ninguna. El código sería el siguiente:
Si no se produce ningún error se hará el commit y en caso contrario el rollback
🔍 Ejecutar y Analizar: Transacciones con varias tablas
Prueba el código de ejemplo y verifica que funciona correctamente.
Ten en cuenta que tendrás que crear una función mainque haga las llamadas correctas a las funciones llevarPlantasAJardin y actualizarAlturasConTransaccion.
🎯 Práctica 5: Transacciones
🎯 Práctica 5: Transacciones
- Diseña un bloque de transacciones de actualización para tu proyecto.
- La operación de transacción debe incluir varios
UPDATE,INSERToDELETE, que afecten a varios registros que cumplan ciertas condiciones. - Si lo deseas, puedes comenzar a añadir nuevas tablas en la BD de tu Proyecto.