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:
-- 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;
¿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.