Inicio‎ > ‎SQL‎ > ‎Lecciones SQL‎ > ‎

P10 Transacciones

Gestión de transacciones en MySQL

Por defecto MySQL está configurado con la opción de autocommit activada. Esto significa que cualquier sentencia de manipulación de datos (insert, delete, update)  que se ejecute, tiene efecto  de manera permanente. Para comprobarlo si abrimos una sesión en MySQL e insertamos datos en una tabla, podemos ver que esos datos están al instante disponibles para el resto de usuarios y de sesiones. Si con nuestro mismo usuario abrimos una nueva sesión, podemos consultar los datos que acabamos de insertar. Sin embargo, hay momentos en los que puede interesar tener el control de la gestión de las transacciones. En ese caso, debemos desactivar el modo autocommit e indicar el final de las transacciones como permanentes (commit) o fallidas (rollback).

Los procedimientos o rutinas almacenadas son un conjunto de instrucciones SQL combinadas con una serie de estructuras de control.  Se guardan en el servidor, forman parte de una base de datos, y se accede a ellas a través de llamadas.


Comandos

START TRANSACTION: Indica inicio de transacción. Pone autocommit a OFF
COMMIT: Hace permanentes los cambios pendientes. Indica fin de transacción. Retorna a modo autocommit on
ROLLBACK: Deshace cambios pendientes. Indica fin de transacción retorna a modo autocommit on


Ejemplo de uso: 

START TRANSACTION;
INSERT INTO profesores (dni, creditos) VALUES (‘1111’, 6); -- solo ve la inserción esta sesión
COMMIT; -- la inserción se lleva a cabo

START TRANSACTION;
INSERT INTO profesores (dni, creditos) VALUES (‘222’,3); -- solo ve la inserción esta sesión
ROLLBACK; la inserción no se lleva a cabo

Las sentencias de definición de datos (alter, create, etc) no tienen posibilidad de rollback. Su ejecución supone un fin de transacción y la validación de los cambios pendientes.