Las propiedades ACID son un conjunto de principios que garantizan que las transacciones en una base de datos se procesen de manera confiable. ACID es un acrónimo que representa Atomicidad, Consistencia, Aislamiento y Durabilidad. Estas propiedades son fundamentales para asegurar la integridad de los datos en sistemas de bases de datos transaccionales.
- Atomicidad
Definición
La atomicidad asegura que una transacción se ejecute completamente o no se ejecute en absoluto. Si alguna parte de la transacción falla, todo el proceso se revierte, dejando la base de datos en su estado original.
Ejemplo
BEGIN TRANSACTION; -- Intentamos insertar un nuevo registro en la tabla de clientes INSERT INTO clientes (nombre, email) VALUES ('Juan Pérez', '[email protected]'); -- Intentamos actualizar el saldo de la cuenta de un cliente UPDATE cuentas SET saldo = saldo - 100 WHERE cliente_id = 1; -- Si ambas operaciones son exitosas, confirmamos la transacción COMMIT; -- Si alguna operación falla, revertimos la transacción ROLLBACK;
Explicación
En este ejemplo, si la inserción en la tabla clientes
o la actualización en la tabla cuentas
falla, la transacción se revertirá completamente, asegurando que la base de datos no quede en un estado inconsistente.
- Consistencia
Definición
La consistencia garantiza que una transacción lleve a la base de datos de un estado válido a otro estado válido, manteniendo las reglas y restricciones definidas en la base de datos.
Ejemplo
-- Supongamos que tenemos una restricción de clave única en el email de la tabla clientes ALTER TABLE clientes ADD CONSTRAINT unique_email UNIQUE (email); BEGIN TRANSACTION; -- Intentamos insertar un nuevo registro con un email duplicado INSERT INTO clientes (nombre, email) VALUES ('Ana Gómez', '[email protected]'); -- Confirmamos la transacción COMMIT;
Explicación
En este ejemplo, la inserción fallará debido a la restricción de clave única en el campo email
. La base de datos mantendrá su consistencia al no permitir la inserción de un registro que viole esta restricción.
- Aislamiento
Definición
El aislamiento asegura que las transacciones concurrentes se ejecuten de manera independiente, sin interferir entre sí. El nivel de aislamiento puede variar, desde no aislamiento (lectura sucia) hasta serialización completa.
Ejemplo
-- Transacción 1 BEGIN TRANSACTION; UPDATE cuentas SET saldo = saldo - 100 WHERE cliente_id = 1; -- Transacción 2 BEGIN TRANSACTION; SELECT saldo FROM cuentas WHERE cliente_id = 1; -- Confirmamos ambas transacciones COMMIT;
Explicación
Dependiendo del nivel de aislamiento configurado, la transacción 2 puede ver el saldo actualizado por la transacción 1 o el saldo original. Los niveles de aislamiento más comunes son:
- Read Uncommitted: Permite lecturas sucias.
- Read Committed: Evita lecturas sucias.
- Repeatable Read: Evita lecturas no repetibles.
- Serializable: Asegura la serialización completa de las transacciones.
- Durabilidad
Definición
La durabilidad garantiza que una vez que una transacción ha sido confirmada (commit), sus cambios se mantendrán permanentemente en la base de datos, incluso en caso de fallos del sistema.
Ejemplo
BEGIN TRANSACTION; -- Insertamos un nuevo registro en la tabla de transacciones INSERT INTO transacciones (cliente_id, monto, fecha) VALUES (1, 100, NOW()); -- Confirmamos la transacción COMMIT;
Explicación
En este ejemplo, una vez que la transacción se confirma, el nuevo registro en la tabla transacciones
se mantendrá en la base de datos, incluso si el sistema falla inmediatamente después del commit.
Resumen
Las propiedades ACID son esenciales para garantizar la integridad y confiabilidad de las transacciones en una base de datos. Aseguran que las transacciones se ejecuten de manera completa y consistente, sin interferencias y con persistencia de los datos. Estas propiedades son fundamentales para cualquier sistema de bases de datos que maneje transacciones críticas.
Preparación para el siguiente tema
En el próximo tema, exploraremos las Instrucciones de control de transacciones, donde aprenderemos cómo manejar explícitamente las transacciones en SQL utilizando comandos como BEGIN
, COMMIT
y ROLLBACK
.
Curso de SQL
Módulo 1: Introducción a SQL
Módulo 2: Consultas básicas de SQL
- Instrucción SELECT
- Filtrando datos con WHERE
- Ordenando datos con ORDER BY
- Limitando resultados con LIMIT
Módulo 3: Trabajando con múltiples tablas
Módulo 4: Filtrado avanzado de datos
- Usando LIKE para coincidencia de patrones
- Operadores IN y BETWEEN
- Valores NULL y IS NULL
- Agregando datos con GROUP BY
- Cláusula HAVING
Módulo 5: Manipulación de datos
Módulo 6: Funciones avanzadas de SQL
Módulo 7: Subconsultas y consultas anidadas
- Introducción a subconsultas
- Subconsultas correlacionadas
- EXISTS y NOT EXISTS
- Usando subconsultas en cláusulas SELECT, FROM y WHERE
Módulo 8: Índices y optimización de rendimiento
- Entendiendo los índices
- Creación y gestión de índices
- Técnicas de optimización de consultas
- Análisis del rendimiento de consultas
Módulo 9: Transacciones y concurrencia
- Introducción a las transacciones
- Propiedades ACID
- Instrucciones de control de transacciones
- Manejo de concurrencia