Transacciones - ACID

Una transacción de base de datos es una secuencia de una o más operaciones lógicas (como inserciones, actualizaciones o eliminaciones) que se tratan como una unidad de trabajo asegurando que estas operaciones se completen por completo (commit) o se anulen totalmente (rollback). Su objetivo fundamental es simplificar la programación ante fallos y accesos concurrentes, trasladando la complejidad de la gestión de la fiabilidad a la base de datos.

ACID

  • Atomicidad (Atomicity): Asegura que una transacción se complete por completo o no se realice en absoluto.
  • Consistencia (Consistency): Asegura que las reglas definidas por la aplicación (constraints, claves foráneas, unicidad, etc) se mantengan antes y después de la transacción.
  • Aislamiento (Isolation): Permite que múltiples transacciones se ejecuten simultáneamente sin interferir entre sí.
  • Durabilidad (Durability): Garantiza que, una vez que una transacción se confirma, sus cambios son permanentes y persistirán incluso en caso de fallos de hardware o del sistema.

Transacciones y Niveles de aislamiento

Antes de continuar, primero unos conceptos:

  • Dirty Read: Se produce cuando una transacción lee datos que aún no se han confirmado.
  • Dirty Write: Ocurre cuando una transacción sobrescribe un valor que fue escrito por otra transacción que aún no ha sido confirmada (committed).
  • Non Repeatable read: Ocurre cuando una transacción lee la misma fila dos veces y obtiene un valor diferente cada vez.
  • Phantom Read: Ocurre cuando se ejecutan dos consultas iguales, pero las filas recuperadas por ambas son diferentes.

Los cuatro niveles (Read Uncommitted, Read Committed, Repeatable Read y Serializable) equilibran el rendimiento y la precisión de los datos.

  • Read Uncommited: Este es el nivel más bajo de aislamiento donde una transacción puede ver cambios no confirmados realizados por otras transacciones.
  • Read Commited: Una transacción solo puede ver los cambios realizados por otras transacciones confirmadas.
Uploaded image
  • Repeatable Read: Una transacción verá los mismos datos durante toda su duración, incluso si otras transacciones realizan cambios en los datos.
  • Serializable: Este es el nivel de aislamiento más alto, donde una transacción se ejecuta como si fuera la única transacción en el sistema.
Uploaded image