Transacciones y MySQL

Un inciso para recordar cómo funcionan las transacciones en un sistema de bases de datos, en qué casos nos importan y cómo MySQL implementa ACID y transacciones usando InnoDB.

Hay una versión nueva de este curso. Haz clic aquí para revisar JDBC, la versión actualizada de este curso.

Cuando trabajamos con bases de datos, es fundamental entender cómo manejar operaciones que involucran varias sentencias SQL relacionadas entre sí. En lugar de ejecutar cada sentencia de forma aislada, a menudo necesitamos agruparlas en bloques que se ejecuten como una unidad indivisible. Esto es precisamente lo que nos permiten las transacciones, garantizando que todas las operaciones dentro de ese bloque se completen correctamente o, en caso contrario, que ninguna se aplique, manteniendo así la integridad y consistencia de los datos.

Los principios ACID son la base que asegura esta consistencia en las transacciones. ACID es un acrónimo que representa Atomicidad, Consistencia, Aislamiento y Durabilidad. La atomicidad nos asegura que todas las sentencias dentro de una transacción se ejecutan como un todo: o todas se aplican o ninguna. La consistencia garantiza que la base de datos pase de un estado válido a otro también válido. El aislamiento evita que las operaciones concurrentes interfieran entre sí, y la durabilidad asegura que una vez que una transacción se confirma, sus cambios persisten incluso ante fallos.

Imaginemos un escenario clásico: un traspaso de dinero entre dos cuentas. Si retiramos dinero de una cuenta y luego intentamos ingresarlo en otra, pero la segunda operación falla, sin transacciones podríamos acabar con un dinero “perdido” o con datos inconsistentes. Gracias a las transacciones, podemos agrupar ambas operaciones y pedir a la base de datos que solo confirme los cambios si ambas se ejecutan correctamente. Si alguna falla, se realiza un rollback, deshaciendo cualquier cambio parcial y dejando la base de datos como estaba antes de iniciar la transacción.

Además, las bases de datos suelen ser multiusuario, lo que significa que mientras una transacción está en curso, otros usuarios podrían intentar acceder a los datos. Las transacciones aseguran que esos usuarios no vean datos intermedios o inconsistentes, sino solo la información confirmada y estable. Esto es crucial para evitar problemas de lectura sucia o datos a medias.

En MySQL, el manejo de transacciones se realiza comenzando con un BEGIN y finalizando con un COMMIT. Si todo va bien, el commit confirma todos los cambios; si algo falla, se ejecuta un ROLLBACK para deshacerlos. Por ejemplo, si tenemos dos sentencias INSERT dentro de una transacción y la segunda falla, la base de datos revertirá la primera para mantener la coherencia.

Es importante destacar que para aprovechar estas características en MySQL debemos usar el motor de almacenamiento adecuado. El motor InnoDB es el que soporta transacciones y cumple con los principios ACID. En cambio, motores como MyISAM no ofrecen soporte para transacciones ni garantizan la consistencia ACID. Por eso, aunque MySQL pueda parecer que no soporta transacciones, en realidad sí lo hace cuando usamos InnoDB, que es el motor predeterminado en las versiones recientes.

¿Por qué MySQL ofrece motores no transaccionales como MyISAM? Porque en ciertos casos, como en aplicaciones donde predominan las consultas de lectura (por ejemplo, un blog que muestra artículos), la velocidad es más importante que la transaccionalidad. MyISAM puede ser más rápido en esos escenarios porque no tiene la sobrecarga de gestionar transacciones. Sin embargo, si necesitamos integridad y consistencia en operaciones que modifican datos, InnoDB es la opción adecuada.

Si estamos trabajando con MySQL y queremos asegurarnos de que nuestras tablas soporten transacciones, debemos verificar que estén usando InnoDB. En caso contrario, conviene migrar las tablas a este motor para evitar problemas. En otros sistemas de bases de datos como PostgreSQL, este tema es menos preocupante, ya que todos sus motores soportan transacciones y ACID por defecto.

En resumen, las transacciones son una herramienta esencial para mantener la integridad de los datos cuando ejecutamos múltiples operaciones relacionadas. Usar el motor adecuado en MySQL, como InnoDB, nos permite aprovechar estas garantías y evitar inconsistencias o datos corruptos. Próximamente veremos cómo implementar estas transacciones desde JDBC para manejar nuestras operaciones de forma segura y eficiente.

Lista de reproducción
  1. 1
    Presentación de JDBC
    4 minutos
  2. 2
    Instalando MySQL
    7 minutos
  3. 3
    Creando tablas
    9 minutos
  4. 4
    Agregando el driver JAR
    7 minutos
  5. 5
    Estableciendo la conexión
    8 minutos
  6. 6
    Statement y ResultSet
    9 minutos
  7. 7
    Bobby Tables y PreparedStatement
    8 minutos
  8. 8
    Transacciones y MySQL
    6 minutos
  9. 9
    Transacciones, commits y rollbacks (parte 1)
    7 minutos
  10. 10
    Transacciones, commits y rollbacks (parte 2)
    6 minutos
  11. 11
    Ejemplo: Crear modelos
    9 minutos
  12. 12
    Ejemplo: Crear los DAO (parte 1)
    10 minutos
  13. 13
    Ejemplo: Crear los DAO (parte 2)
    12 minutos
  14. 14
    Ejemplo: Crear los DAO (parte 3)
    13 minutos
  15. 15
    Ejemplo: DAO Manager
    12 minutos
  16. 16
    Ejemplo: CRUD Alumnos (parte 1)
    15 minutos
  17. 17
    Ejemplo: CRUD Alumnos (parte 2)
    14 minutos
  18. 18
    Ejemplo: CRUD Alumnos (parte 3)
    13 minutos
  19. 19
    Ejemplo: CRUD Profesores
    25 minutos
  20. 20
    Ejemplo: CRUD Asignaturas
    alrededor de 1 hora
  21. 21
    Ejemplo: Login (final adelantado)
    17 minutos
  22. 22
    Conectar a PostgreSQL en Java con JDBC
    8 minutos
  23. 23
    Conectar a PostgreSQL en Kotlin con JDBC
    7 minutos
  24. 24
    Conectar a PostgreSQL en Java con JDBC (con NetBeans)
    10 minutos