CONTENIDO
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).
Comandos
START TRANSACTION: Indica inicio de transacción. Hace permanentes los cambios, si los hay. 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 (CREATE, ALTER, DROP, etc) no tienen posibilidad de rollback. Su ejecución supone un fin de transacción (retorno a autocommit on) y la validación de los cambios pendientes. A efectos prácticos equivale a hacer COMMIT:
START TRANSACTION;
INSERT INTO profesores (dni, creditos) VALUES (‘222’,3);
DROP TABLE asignaturas; -- la inserción anterior se lleva a cabo puesto que DROP ha forzado un COMMIT
ROLLBACK; -- ROLLBACK ya no tiene nada que deshacer