Este artículo de PlanetScale explica las transacciones en bases de datos SQL, un concepto fundamental para el correcto funcionamiento de la mayoría de las aplicaciones que utilizan bases de datos. Una transacción es una secuencia de operaciones (lecturas, creaciones, actualizaciones, eliminaciones) que se tratan como una única unidad atómica. Esto significa que todas las operaciones dentro de una transacción se completan con éxito o ninguna se realiza.
En MySQL y PostgreSQL, las transacciones se inician con BEGIN; y se finalizan con COMMIT;. Entre estos comandos, se pueden ejecutar múltiples consultas. Si algo sale mal durante la transacción, el comando ROLLBACK; deshace todos los cambios, dejando la base de datos en su estado original. Esto es crucial para mantener la integridad de los datos, especialmente en entornos con múltiples usuarios o procesos accediendo a la base de datos simultáneamente.
Un aspecto clave es la consistencia de las lecturas. Durante una transacción, esta debe tener una vista consistente de la base de datos, aislada de los cambios realizados por otras transacciones concurrentes hasta que se confirme (commit). PostgreSQL logra esto mediante el versionado de filas (multi-row versioning), creando nuevas versiones de las filas cada vez que se actualizan. MySQL, por otro lado, utiliza un registro de deshacer (undo log) para rastrear los cambios y poder reconstruir versiones anteriores de las filas según sea necesario. PostgreSQL necesita un proceso de limpieza llamado VACUUM FULL para eliminar versiones antiguas de filas y optimizar el espacio. MySQL, al no mantener múltiples versiones, evita esta necesidad de limpieza.
Las transacciones permiten la ejecución concurrente de consultas sin interferencias, garantizando que los datos sean consistentes y confiables. El artículo ilustra cómo las transacciones impiden que una sesión vea los cambios realizados por otra hasta que se confirmen, y cómo el ROLLBACK asegura que los cambios parciales se desestimen. Comprender cómo funcionan las transacciones es esencial para diseñar aplicaciones robustas y evitar problemas de integridad de datos.
