Propiedades ACID
Comprende las propiedades ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad) que garantizan la fiabilidad de las transacciones en bases de datos relacionales.
Cristian Escalante
Última actualización: 11 de mayo de 2025
¿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:
- READ UNCOMMITTED: El nivel más bajo de aislamiento. Permite lecturas sucias, no repetibles y fantasma.
- READ COMMITTED: Evita lecturas sucias, pero permite lecturas no repetibles y fantasma.
- REPEATABLE READ: Evita lecturas sucias y no repetibles, pero permite lecturas fantasma.
- 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):
ACID | BASE |
---|---|
Consistencia fuerte | Consistencia eventual |
Disponibilidad puede sacrificarse por consistencia | Alta disponibilidad |
Ideal para datos críticos | Ideal para alta escalabilidad |
Transacciones completas | Operaciones 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.