Tema 20 · TRANSACCIONES & ACID

Transacciones y Propiedades ACID (COMMIT y ROLLBACK)

Comprende el concepto fundamental de transacción, los principios ACID para salvaguardar la integridad de los datos y el uso de START TRANSACTION, COMMIT y ROLLBACK.

¿Qué es una Transacción en Bases de Datos?

Una transacción es una secuencia de una o más operaciones SQL ejecutadas como una sola unidad atómica de trabajo. O se aplican todos los cambios con éxito, o no se aplica ninguno, garantizando que la base de datos nunca quede en un estado inconsistente o corrupto.

El ejemplo clásico es una transferencia bancaria: restar $100 de la cuenta A y sumar $100 a la cuenta B. Si el servidor se apaga a mitad de camino, una transacción asegura que el dinero no desaparezca en el vacío.

Las 4 Propiedades ACID

  • Atomicidad (Atomicity): Todo o nada. Si falla una sola instrucción del bloque, todas las operaciones previas se deshacen.
  • Consistencia (Consistency): La transacción solo puede llevar la base de datos de un estado válido a otro, respetando todas las reglas de integridad, tipos y claves foráneas.
  • Aislamiento (Isolation): Las transacciones concurrentes no interfieren entre sí. Los cambios no confirmados no son visibles para otros usuarios (niveles de aislamiento como Read Committed o Repeatable Read).
  • Durabilidad (Durability): Una vez confirmada la transacción con éxito (COMMIT), los cambios son permanentes y resistirán fallos de energía o reinicios del servidor.

Control de Transacciones: COMMIT y ROLLBACK

-- En MySQL (motor InnoDB):
START TRANSACTION;

-- Paso 1: Inscribir estudiante
INSERT INTO inscripciones (estudiante_id, curso_id, fecha, nota)
VALUES (4, 1, '2026-04-01', 0.0);

-- Paso 2: Actualizar estado de estudiante a activo
UPDATE estudiantes 
SET activo = 1 
WHERE id = 4;

-- Si todo es correcto, guardamos permanentemente:
COMMIT;

-- Si ocurre algún error, revertimos todo al estado original:
-- ROLLBACK;

⚡ Verificación de Integridad de Datos en Transacción

Consulta el estado actual de los estudiantes y sus inscripciones para auditar la consistencia relacional del sistema:

consulta.sql
Solo lectura
-- Auditoría de consistencia: Verificar estudiantes activos y cantidad de inscripciones
SELECT 
    e.id AS id_estudiante,
    e.nombre,
    CASE WHEN e.activo = 1 THEN 'Activo' ELSE 'Inactivo' END AS estado_academico,
    COUNT(i.id) AS total_materias_matriculadas
FROM estudiantes e
LEFT JOIN inscripciones i ON e.id = i.estudiante_id
GROUP BY e.id, e.nombre, e.activo
ORDER BY total_materias_matriculadas DESC, e.nombre ASC;
Pruébalo tú mismo » Se abre en una nueva pestaña con ejecución en vivo
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Manual Completo de SQL & MySQL y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.