¿Qué son las transacciones ACID?

Actualizado: agosto de 2026

Una transacción ACID es un grupo de operaciones de base de datos que hace commit como una sola unidad — atómica, consistente, aislada y durable. La idea es anterior al acrónimo: Jim Gray definió las garantías en 1981, Härder y Reuter las bautizaron ACID en 1983, y cuarenta años después sigue siendo el contrato que permite mover dinero en software sin, de vez en cuando, inventar o destruir una parte.

Puntos clave

PreguntaRespuesta
Las cuatro letrasAtómica (todo-o-nada) · Consistente (las reglas se cumplen) · Aislada (sin interferencia) · Durable (sobrevive a caídas)
Ejemplo canónicoLa transferencia bancaria: débito + crédito hacen commit juntos o ninguno lo hace
La perillaNiveles de aislamiento — rendimiento cambiado por anomalías de lectura
El rivalBASE / consistencia eventual — disponibilidad cambiada por desactualización
La realidad modernaLas bases de documentos también hacen ACID; la letra chica es el alcance

Cómo funcionan las transacciones ACID en SQL (ejemplo de transferencia bancaria)

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 'alice';
UPDATE accounts SET balance = balance + 100 WHERE id = 'bob';

-- ¿Caída o error entre los dos updates? El motor hace rollback:
-- ROLLBACK;  →  ambos cambios desaparecen; el dinero no puede evaporarse

COMMIT;       -- o ambos se vuelven permanentes, de forma atómica y durable

El código de aplicación encuentra las mismas garantías en paquetes más pequeños — operaciones atómicas de campo que terminan la carrera de read-modify-write, y lotes que hacen commit juntos:

// JavaScript / Node.js — Back4app JS SDK
// Atomicity where apps actually need it
counter.increment('sold', 1);        // atomic single-field update — no
await counter.save();                // read-modify-write race possible

// All-or-nothing batch: both rows commit, or neither does
await Parse.Object.saveAll([debitEntry, creditEntry], { transaction: true });

El ciclo de vida de la transacción: BEGIN, COMMIT y ROLLBACK

Ciclo de vida de la transacciónUna transacción comienza, ejecuta operaciones contra un estado de trabajo y o bien hace commit — volviendo permanentes todos los cambios — o hace rollback ante cualquier falla, restaurando el estado válido anterior.

todas tienen éxito

cualquier falla

BEGIN

Operaciones
lecturas + escrituras, aisladas

COMMIT
permanente, durable

ROLLBACK
como si nada hubiera pasado

Una transacción comienza, ejecuta operaciones contra un estado de trabajo y o bien hace commit — volviendo permanentes todos los cambios — o hace rollback ante cualquier falla, restaurando el estado válido anterior.

Las cuatro propiedades, cada una por lo que se rompe sin ella: atomicidad — sin ella, escrituras parciales (la transferencia debitada-pero-nunca-acreditada). Consistencia — sin ella, estados commiteados que violan tus propias reglas (stock negativo, referencias huérfanas). Aislamiento — sin él, las transacciones concurrentes leen el trabajo a medio hacer de las demás. Durabilidad — sin ella, datos “commiteados” que una caída deshace en silencio. Bajo el capó, tres mecanismos las entregan: logs de undo para el rollback, write-ahead logging para sobrevivir a las caídas, y locks o MVCC para la concurrencia.

Niveles de aislamiento vs. anomalías de lectura

La matriz que casi ningún resultado de búsqueda arma — qué nivel detiene qué anomalía:

NivelDirty readNon-repeatable readPhantom readCosto
Read uncommittedposibleposibleposibleel menor
Read committedprevenidoposibleposiblebajo
Repeatable readprevenidoprevenidoposiblemedio
Serializableprevenidoprevenidoprevenidoel mayor

Traduciendo: un dirty read ve trabajo sin commit; un non-repeatable read recibe respuestas distintas al preguntar dos veces; un phantom ve filas aparecer a mitad de la transacción. La mayoría de los motores modernos usa por defecto comportamiento de snapshot basado en MVCC — cada transacción lee un snapshot consistente mientras los escritores avanzan — y por eso “los lectores no bloquean a los escritores” se volvió la norma, no la excepción.

ACID vs. BASE — y el homónimo de la consistencia

DimensiónACIDBASE
Optimiza paraCorrección por transacciónDisponibilidad a escala
ConsistenciaInmediata, preservando las reglasEventual
Hábitat naturalDinero, inventario, reservasFeeds, contadores, caches
Postura de escaladoLimitada por la coordinaciónHorizontal por diseño
Modo de fallaMás lenta bajo contenciónLecturas temporalmente desactualizadas

Una desambiguación carga toda esta comparación: la C de ACID y la C de CAP son palabras distintas vistiendo la misma letra. Consistencia en ACID significa que cada transacción preserva las reglas que declaraste. Consistencia en CAP significa que todos los nodos concuerdan ahora mismo. Una base de datos de un solo nodo es totalmente ACID sin que CAP entre a la sala; un sistema distribuido elige su trade-off de CAP y sus garantías transaccionales por separado.

Quién garantiza qué

Familia de motoresHistoria con ACID
PostgreSQLACID completo, MVCC, serializable disponible
MySQLACID completo con InnoDB — la elección de la engine importa
SQLiteACID completo, escritor único, modo WAL
MongoDBAtomicidad de documento único siempre; transacciones multidocumento desde la 4.0 (2018), aislamiento por snapshot
Motores SQL distribuidosACID vía replicación por consenso — serializable a precio de red
Stores wide-column / eventualesAjustable, parcial — BASE por diseño

Las transacciones distribuidas merecen su nota al pie honesta: el commit en dos fases (two-phase commit) compra atomicidad entre nodos al precio de latencia y de un coordinador bloqueante, razón por la que las arquitecturas de microservicios prefieren cada vez más las sagas — secuencias de transacciones locales con rollbacks compensatorios, cambiando consistencia inmediata por disponibilidad. Si un workflow genuinamente no tolera compensación, eso es evidencia de que pertenece a una sola base de datos, no a varias.

Casos de uso comunes

  • Movimiento de dinero. Transferencias, pagos, libros contables — el caso canónico y todavía el más claro.
  • Inventario y reservas. Decrementar el stock y confirmar el pedido juntos, o mirar a dos clientes comprar el último asiento.
  • Invariantes de varias filas. Pedido + líneas de detalle, cuenta + registro de auditoría — registros que solo nacen válidos juntos.
  • Contadores bien hechos. Incrementos atómicos — la dosis útil más pequeña de ACID — terminan la carrera de read-modify-write sin transacciones completas.
  • El complemento de consistencia eventual. Feeds, likes, analytics: enrutados explícitamente lejos del costo transaccional, a propósito.

¿Debe ser ACID? Matriz de decisión

Exige transacciones completas cuando…La consistencia eventual alcanza cuando…
Dinero o propiedad cambia de manosUn contador desactualizado no cuesta nada
Las escrituras parciales crean estados inválidosCada escritura es válida por sí sola
Los reguladores van a exigir la invarianteEl dato es derivado y reconstruible
Dos filas deben concordar, siempreConverger después es una UX aceptable
Sobrevender es una demandaContar de más es encogerse de hombros

El oficio es enrutar por escritura: el checkout usa transacciones, el contador de vistas usa un incremento atómico, el feed tolera un segundo de deriva — una aplicación, tres niveles de precio para la consistencia.

Limitaciones y trade-offs

  • La coordinación es el centro de costos. Los locks compiten, los syncs del WAL golpean el disco, los reintentos de serializable abortan — la corrección tiene una factura de throughput, y esa es la razón entera de que BASE exista.
  • Los niveles de aislamiento son un default traicionero. La mayoría de los motores no usa serializable por defecto; conoce tu nivel, o las anomalías que creías imposibles son apenas improbables.
  • Las transacciones largas son mala señal. Sostener locks durante el tiempo de decisión del usuario o llamadas de red convierte garantías en contención; mantén las transacciones cortas y decididas.
  • El ACID distribuido es caro por naturaleza. Rondas de consenso por cada commit — págalo donde las invariantes lo exijan, no en todas partes por reflejo.
  • ACID no puede validar tus reglas por ti. La consistencia preserva constraints declarados; las reglas de negocio nunca codificadas quedan fielmente sin aplicar.

Transacciones ACID en Back4app

Back4app es una plataforma open-source de Backend as a Service (BaaS) que combina base de datos gestionada, APIs REST y GraphQL generadas automáticamente, autenticación, almacenamiento de archivos y funciones serverless con Cloud Code. Su kit transaccional coincide con cómo las apps realmente consumen ACID: cada escritura de objeto único es atómica en el motor de documentos subyacente, los incrementos atómicos y las operaciones de array terminan las clásicas carreras de contadores (las pestañas de código de arriba), los guardados en lote agrupan escrituras, y las invariantes de varios pasos pertenecen a Cloud Code — validadas y ejecutadas en el servidor, donde un trigger beforeSave puede rechazar cualquier escritura que rompería las reglas. La matriz de decisión viene incorporada: atomicidad barata por defecto, coordinación completa donde la pidas.

Preguntas frecuentes

¿Qué significa la sigla ACID?

Atomicidad, Consistencia, Aislamiento y Durabilidad — las cuatro garantías que una transacción de base de datos debe dar para que los datos sigan correctos a través de errores, caídas y usuarios concurrentes. Jim Gray definió las propiedades centrales en 1981; Theo Härder y Andreas Reuter acuñaron el acrónimo en su artículo de 1983 sobre recuperación orientada a transacciones.

¿Qué es una transacción ACID en términos simples?

Un grupo de lecturas y escrituras ejecutado como una unidad de todo-o-nada. O cada operación hace commit y se vuelve permanente, o cada operación sufre rollback como si nada hubiera pasado. El ejemplo canónico es la transferencia de dinero: debitar una cuenta, acreditar otra — una caída entre las dos jamás puede dejar el dinero debitado pero no acreditado.

¿Qué son los niveles de aislamiento?

La perilla que cambia rendimiento por protección cuando las transacciones corren concurrentemente. El estándar SQL define cuatro — read uncommitted, read committed, repeatable read, serializable — cada uno previniendo más anomalías (dirty reads, non-repeatable reads, phantoms) a mayor costo. En la práctica, la mayoría de los motores modernos usa por defecto aislamiento estilo snapshot vía MVCC, donde los lectores ven un snapshot consistente y nunca bloquean a los escritores.

¿Cuál es la diferencia entre ACID y BASE?

Dos respuestas al costo de la corrección. ACID paga en coordinación para garantizar que cada transacción vea y deje un estado válido. BASE — Basically Available, Soft state, Eventually consistent — paga en desactualización temporal para seguir disponible y escalar horizontalmente. Ninguno es superior; le ponen precios distintos a la consistencia, y los sistemas reales los mezclan según la carga de trabajo.

¿La consistencia de ACID es la misma que la del teorema CAP?

No — y confundirlas es el error más común sobre este tema. Consistencia en ACID significa que cada transacción preserva las reglas declaradas: los constraints se cumplen, las invariantes sobreviven. Consistencia en CAP significa que todo nodo de un sistema distribuido ve los mismos datos al mismo tiempo. Una base de datos de un solo nodo puede ser totalmente ACID sin que CAP tenga nada que decir sobre ella.

¿Las bases NoSQL cumplen con ACID?

Cada vez más, con letra chica. Las bases de documentos siempre hicieron atómicas las escrituras de un solo documento — lo que, combinado con incrustar los datos relacionados, cubre la mayoría de las necesidades de una app. Las transacciones ACID multidocumento llegaron en MongoDB 4.0 (2018) con aislamiento por snapshot, a un costo real de rendimiento. La vieja afirmación de que "NoSQL no tiene transacciones" quedó simplemente desactualizada; la preferencia de diseño por modelar alrededor de la atomicidad de documento único, no.

¿Cómo implementan ACID las bases de datos en la práctica?

Tres mecanismos cargan el peso: la información de undo hace posible el rollback (atomicidad); el write-ahead logging — cambios registrados en un log durable antes de aplicarse — sobrevive a las caídas (durabilidad); y los locks o MVCC mantienen a las transacciones concurrentes fuera del camino de las demás (aislamiento). La consistencia es el resultado: constraints verificados bajo la protección de las otras tres.

¿Cuándo alcanza con la consistencia eventual?

Cuando una breve ventana de desactualización no cuesta nada: likes, contadores de vistas, feeds de actividad, analytics, caches, recomendaciones de producto. Cuando no alcanza: dinero, inventario que puede sobrevenderse, reservas de asientos y entradas, cualquier cosa regulada. La habilidad de ingeniería no es elegir un bando, sino enrutar cada escritura hacia la garantía que realmente necesita.

Términos relacionados

Compara con

Lecturas recomendadas

¿Listo para construir tu backend?

Empieza tu proyecto en Back4app en minutos — base de datos, autenticación, APIs y Cloud Code incluidos. Sin tarjeta de crédito.

Escrito y revisado por Back4app Engineering, Back4app Engineering · Publicado el 2026-08-28