HDP115

Propiedades ACID

Comprende las propiedades ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad) que garantizan la fiabilidad de las transacciones en bases de datos relacionales.

CE

Cristian Escalante

Última actualización: 11 de mayo de 2025

sql
programación
desarrollo
base de datos

¿Qué son las propiedades ACID?

Las propiedades ACID son un conjunto de características que garantizan que las transacciones en una base de datos se procesen de manera confiable. ACID es un acrónimo que representa cuatro propiedades clave: Atomicidad, Consistencia, Aislamiento y Durabilidad.

Estas propiedades son fundamentales en los sistemas de gestión de bases de datos relacionales (RDBMS) y aseguran la integridad de los datos incluso en situaciones de fallos del sistema, errores de aplicación o accesos concurrentes.

Atomicidad (Atomicity)

La atomicidad garantiza que una transacción se trata como una unidad indivisible de trabajo. Esto significa que:

  • O bien todas las operaciones dentro de la transacción se completan con éxito (commit)
  • O ninguna de ellas se aplica (rollback)

No existe un estado intermedio donde solo algunas operaciones se hayan aplicado y otras no.

Ejemplo de atomicidad

Consideremos una transferencia bancaria que implica dos operaciones:

BEGIN TRANSACTION;
    -- Operación 1: Restar dinero de la cuenta A
    UPDATE cuentas SET saldo = saldo - 1000 WHERE id_cuenta = 1;
    
    -- Operación 2: Sumar dinero a la cuenta B
    UPDATE cuentas SET saldo = saldo + 1000 WHERE id_cuenta = 2;
COMMIT;

La atomicidad garantiza que:

  • Si ambas operaciones tienen éxito, se confirma la transacción
  • Si cualquiera de las operaciones falla (por ejemplo, la cuenta B no existe), toda la transacción se revierte y la cuenta A mantiene su saldo original

Consistencia (Consistency)

La consistencia asegura que una transacción solo puede llevar la base de datos de un estado válido a otro estado válido, manteniendo todas las reglas de integridad definidas:

  • Restricciones de integridad referencial (claves foráneas)
  • Restricciones CHECK
  • Triggers
  • Cualquier otra regla de negocio implementada

Ejemplo de consistencia

Supongamos que tenemos una restricción que establece que el saldo de una cuenta no puede ser negativo:

CREATE TABLE cuentas (
    id_cuenta INT PRIMARY KEY,
    titular VARCHAR(100),
    saldo DECIMAL(10,2) CHECK (saldo >= 0)
);

BEGIN TRANSACTION;
    -- Esta operación violaría la restricción CHECK si el saldo es menor a 1000
    UPDATE cuentas SET saldo = saldo - 1000 WHERE id_cuenta = 1;
    
    -- Si la operación anterior viola la restricción, la transacción fallará
    -- y la base de datos permanecerá en un estado consistente
COMMIT;

Aislamiento (Isolation)

El aislamiento garantiza que las transacciones concurrentes se ejecuten de manera aislada unas de otras, como si fueran secuenciales, aunque en realidad se ejecuten en paralelo. Esto evita problemas como:

  • Lecturas sucias (dirty reads)
  • Lecturas no repetibles (non-repeatable reads)
  • Lecturas fantasma (phantom reads)

Niveles de aislamiento

SQL define cuatro niveles estándar de aislamiento, cada uno con diferentes compromisos entre consistencia y rendimiento:

  1. READ UNCOMMITTED: El nivel más bajo de aislamiento. Permite lecturas sucias, no repetibles y fantasma.
  2. READ COMMITTED: Evita lecturas sucias, pero permite lecturas no repetibles y fantasma.
  3. REPEATABLE READ: Evita lecturas sucias y no repetibles, pero permite lecturas fantasma.
  4. SERIALIZABLE: El nivel más alto de aislamiento. Evita todos los problemas de concurrencia mencionados.

Ejemplo de aislamiento

-- Transacción 1 (ejecutada por el usuario A)
BEGIN TRANSACTION;
    -- Con nivel READ COMMITTED, esta consulta solo verá datos confirmados
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
    
    SELECT saldo FROM cuentas WHERE id_cuenta = 1;
    -- Supongamos que devuelve 5000
    
    -- Mientras tanto, el usuario B actualiza y confirma el saldo
    
    -- Si el usuario A vuelve a consultar, podría ver un valor diferente
    -- (lectura no repetible)
    SELECT saldo FROM cuentas WHERE id_cuenta = 1;
    -- Podría devolver 4000 si el usuario B modificó el saldo
COMMIT;

Durabilidad (Durability)

La durabilidad garantiza que una vez que una transacción ha sido confirmada (commit), los cambios realizados persistirán incluso en caso de fallos del sistema, como:

  • Cortes de energía
  • Fallos de hardware
  • Errores del sistema operativo

Los sistemas de bases de datos implementan la durabilidad mediante:

  • Escritura en logs de transacciones
  • Almacenamiento en medios no volátiles
  • Mecanismos de recuperación

Ejemplo de durabilidad

BEGIN TRANSACTION;
    INSERT INTO ventas (producto_id, cantidad, precio_total, fecha)
    VALUES (101, 5, 250.00, CURRENT_TIMESTAMP);
COMMIT;

Una vez ejecutado el COMMIT:

  • Los datos se escriben en el log de transacciones
  • Se confirma la escritura en disco
  • Incluso si el servidor se apaga inmediatamente después, la transacción se recuperará cuando el sistema vuelva a funcionar

Importancia de ACID en aplicaciones críticas

Las propiedades ACID son especialmente importantes en aplicaciones donde la integridad de los datos es crítica:

  • Sistemas financieros: Garantizan que las transacciones monetarias sean precisas y completas
  • Sistemas de reservas: Aseguran que no se vendan más asientos que los disponibles
  • Sistemas médicos: Protegen la integridad de los datos de pacientes y registros médicos
  • Sistemas de inventario: Mantienen un seguimiento preciso de los productos disponibles

Implementación de ACID en diferentes SGBD

Aunque todos los principales sistemas de gestión de bases de datos relacionales implementan las propiedades ACID, pueden hacerlo de manera diferente:

MySQL

  • Con el motor InnoDB: Soporte completo de ACID
  • Con el motor MyISAM: No garantiza todas las propiedades ACID (carece de soporte para transacciones)

PostgreSQL

  • Implementación robusta de ACID
  • Soporte avanzado para niveles de aislamiento

Oracle

  • Fuerte soporte para ACID
  • Características adicionales como flashback para recuperación

SQL Server

  • Implementación completa de ACID
  • Diferentes niveles de aislamiento configurables

ACID vs. BASE

Con el surgimiento de bases de datos NoSQL y sistemas distribuidos, ha aparecido un enfoque alternativo llamado BASE (Basically Available, Soft state, Eventually consistent):

ACIDBASE
Consistencia fuerteConsistencia eventual
Disponibilidad puede sacrificarse por consistenciaAlta disponibilidad
Ideal para datos críticosIdeal para alta escalabilidad
Transacciones completasOperaciones parciales permitidas

Conclusión

Las propiedades ACID son fundamentales para garantizar la integridad y fiabilidad de los datos en sistemas de bases de datos relacionales. Proporcionan un marco sólido para el procesamiento de transacciones que ha sido la base de los sistemas de información empresarial durante décadas.

Aunque los sistemas NoSQL y distribuidos modernos pueden relajar algunas de estas propiedades en favor de la escalabilidad y disponibilidad, comprender ACID sigue siendo esencial para cualquier profesional que trabaje con bases de datos, ya que estos principios informan las decisiones sobre qué compromisos son aceptables en un sistema particular.

Transacciones en SQL
Aprende qué son las transacciones en SQL, cómo funcionan y c...
Comandos DCL en SQL
Aprende sobre los comandos de Data Control Language (DCL) en...
Referencias
GeeksforGeeks. ACID Properties in DBMS. https://www.geeksforgeeks.org/acid-properties-in-dbms/
Microsoft Documentation. Ensuring ACID Properties in Database Transactions. https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide
Jim Gray and Andreas Reuter. Transaction Processing: Concepts and Techniques. https://dl.acm.org/doi/book/10.5555/573304

Conceptos Básicos de HTML

Aprende los conceptos básicos de HTML

Conceptos Básicos de CSS

Aprende los conceptos básicos de CSS

Conceptos Básicos de JavaScript

Aprende los conceptos básicos de JavaScript

Conceptos Básicos de GIT

Aprende los conceptos básicos de GIT

Conceptos Básicos de Python

Aprende los conceptos básicos de Python

Conceptos Básicos de UML

Aprende los conceptos básicos de UML

Refuerzo Academico de Herramientas de Productividad 2025