Skip to content

2.12 Transacción

Una transacción es una secuencia de operaciones que se ejecutan como una unidad lógica.

Una unidad lógica significa que todas las operaciones deben completarse con éxito o ninguna de ellas debe aplicarse. Esto es crucial para mantener la integridad de los datos en situaciones donde múltiples usuarios pueden estar accediendo y modificando la base de datos al mismo tiempo.

Debes tener en cuenta que las transacciones NO conocen tu lógica de negocio. NO te protegen por ejemplo de que tu script intente enviar dinero de una cuenta a otra que no existe.

La transacción evita que se realicen cambios parciales en caso de ocurrir una excepción, por ejemplo, si el servidor se cae o si la conexión se pierde durante la ejecución de una operación. NUNCA de problemas derivados de la lógica de tu aplicación.

Propiedades ACID

Las transacciones en los SGBD deben cumplir con las propiedades ACID (Atomicity, Consistency, Isolation, Durability):

  • Atomicidad: Garantiza que todas las operaciones de la transacción se completen con éxito o ninguna de ellas se aplique. Si una operación falla, se revierte toda la transacción.
  • Consistencia: Asegura que la base de datos pase de un estado válido a otro estado válido. Todas las reglas de integridad deben cumplirse.
  • Aislamiento: Permite que las transacciones se ejecuten de manera independiente y aislada, evitando que los cambios de una transacción sean visibles para otras hasta que se complete.
  • Durabilidad: Una vez que una transacción se ha confirmado, sus cambios son permanentes, incluso en caso de fallos del sistema.

Atomicidad

Es la propiedad que asegura que todas las operaciones de una transacción se ejecuten completamente o no se ejecuten en absoluto. Si alguna operación falla, todas las operaciones anteriores se deshacen, garantizando que la base de datos no quede en un estado intermedio inconsistente.

Consistencia

Es la propiedad que asegura que una transacción lleva a la base de datos de un estado válido a otro estado válido. Esto significa que todas las reglas de integridad, como claves primarias, foráneas y restricciones, deben cumplirse antes y después de la transacción.

Aislamiento

Es la propiedad que garantiza que las transacciones se ejecuten de manera independiente. Esto significa que los cambios realizados por una transacción no son visibles para otras transacciones hasta que se completa la transacción. Esto evita problemas como lecturas sucias, lecturas no repetibles y fantasmas.

Durabilidad

Es la propiedad que asegura que una vez que una transacción se ha confirmado, sus cambios son permanentes, incluso en caso de fallos del sistema.

Esto se logra mediante el uso de registros de transacciones y copias de seguridad, que permiten recuperar el estado de la base de datos en caso de un fallo.

Sintaxis

Para trabajar con transacciones en MySQL, se utilizan los siguientes comandos:

START TRANSACTION; -- Inicia una nueva transacción
-- Cuerpo de la transacción
COMMIT; -- Confirma la transacción, aplicando todos los cambios
ROLLBACK; -- Deshace la transacción, revertiendo todos los cambios

En SQLite, sustituye START por BEGIN.