Saltar al contenido principal
eLearner.app
Módulo 11 · Lección 1 de 441/57 en el curso~15 min
Lecciones del módulo (1/4)

Transacciones ACID (BEGIN/COMMIT)

Los fundamentos de la confiabilidad de cualquier base de datos se basan en el acrónimo ACID:

  • Atomicidad: una operación se completa por completo (Commit) o ​​falla sin dejar rastros a medio hacer (Rollback).
  • Cconsistencia: las reglas de la base de datos (por ejemplo, restricciones, claves externas) siempre se respetan.
  • Isolación: las transacciones que ocurren al mismo tiempo no interfieren entre sí de manera incontrolada.
  • Durabilidad: después de una confirmación, el cambio se escribe irreversiblemente en el disco.

Sintaxis de transacción

Normalmente, cada consulta de ACTUALIZAR o ELIMINAR se trata como una transacción independiente (confirmación automática). Pero cuando desea agrupar varias operaciones, por ejemplo, cargar la cuenta del cliente y realizar el pedido, debe hacerlo explícitamente utilizando la sintaxis de transacción.

SQL
BEGIN;

UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
INSERT INTO orders (user_id, total) VALUES (1, 100);

COMMIT; -- Writes the changes

Si durante estas complejas ejecuciones la aplicación JavaScript que envió la consulta se da cuenta de que hay un problema (por ejemplo, no hay suficiente stock en el almacén y falla), enviaría un:

SQL
ROLLBACK; -- Cancels the changes and discards the 2 queries sent in the block

Pruébalo tú mismo

Ejercicio#sql.m11.l1.e1
Intentos: 0Cargando...

Abra una transacción. Actualice el producto con ID 10 estableciendo su 'cantidad' en 0 en la tabla temporal (no espere, 'cantidad' no está en los productos, inventemos: cambie 'precio_unitario' en 'artículos_pedido' pero eso requiere una restricción. Hagámoslo mejor: actualice el estado del ID de pedido 5 a 'enviado' y complete con éxito la transacción.

Cargando editor...
Mostrar pista

Comience con BEGIN;, cambie los pedidos de id = 5 a status='enviado', luego envíelos con COMMIT;

Solución disponible después de 3 intentos

Ejercicio#sql.m11.l1.e2
Intentos: 0Cargando...

¡Pánico en producción! Un desarrollador escribió un DELETE sin el DÓNDE, históricamente borrando todas las reseñas. Mostrémosles cómo se realiza la reversión. Inicie una transacción, ejecute un DELETE rápido que borre todo, desde las 'revisiones' (sin una cláusula WHERE), pero luego use el salvavidas de SQL para deshacer el impacto antes de completar el bloque.

Cargando editor...
Mostrar pista

BEGIN;, la eliminación de borrón y cuenta nueva en 'reseñas', y luego el mágico ROLLBACK; al final.

Solución disponible después de 3 intentos