Gestión de transacciones en MySQLPor 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.
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.
|