View
185
Download
4
Category
Preview:
Citation preview
START TRANSACTIONCOMMITROLLBACK
Por defecto, MySQL se ejecuta en modo autocommit. Esto significa que tan pronto como se ejecuta
una sentencia se actualiza (modifica) la tabla, MySQL almacenará la actualización en disco.
Si se están usando tablas de transacción segura (como InnoDB o BDB), se puede poner MySQL en
modo no-autocommit con el comando siguiente:
SET AUTOCOMMIT=0
Después de desconectar el modo autocommit asignando cero a la variable AUTOCOMMIT, se debe
usar COMMIT para almecenar los cambios en disco o ROLLBACK si se quieren ignorar los cambios
hechos desde el principio de la transacción.
Si se quiere desactivar el modo autocommit para una serire de sentencias, se puede usar una
sentencia START TRANSACTION:
START TRANSACTION;SELECT @A:=SUM(salary) FROM table1 WHERE type=1;UPDATE table2 SET summmary=@A WHERE type=1;COMMIT;
Se puede usar BEGIN y BEGIN WORK en lugar de START TRANSACTION para iniciar una
transacción. START TRANSACTION fue añadido en MySQL 4.0.11; es la sintaxis SQL-99 y es el modo
recomendado para empezar una transacción. BEGIN y BEGIN WORK están disponibles desde MySQL
3.23.17 y 3.23.19, respectivamente.
Si no se están usando tablas de transacción segura, cualquier cambio será almacenado
inmediatamente, independientemente del estado del modo autocommit.
Si se usa una sentencia ROLLBACK después de actualizar una tabla no transaccional, se obtendrá un
error (ER_WARNING_NOT_COMPLETE_ROLLBACK) como un aviso. Todas las tablas de transacción
segura serán restauradas, pero cualquier tabla de transacción no segura no cambiará.
Si se usar START TRANSACTION o SET AUTOCOMMIT=0, se debe usar el diario binario MySQL para
copias de seguridad en lugar del antigui diario de actualización. Las transacciones se almacenan en el
diario binario de una vez, después de COMMIT, para asegurar que las transacciones que se han
rebobinado no se almacenen.
Se puede modificar el nivel de aislamiento para transacciones con SET TRANSACTION ISOLATION
LEVEL.
Transacciones en MySQL. ROLLBACK y COMMITUna transacción en MySQL es una secuencia de una o más sentencias SQL que juntas forman una unidad de trabajo.
Imagina que quieres borrar uno o varios registros de una tabla, pero te equivocas y eliminas todos los registros de la tabla. ¿Existe alguna forma de subsanar el error y dar marcha atrás para recuperar los registros eliminados? La respuesta es sí, utilizando transacciones.
Por defecto MySQL funciona en modo autocommit. Esto quiere decir que se confirma (COMMIT) cada sentencia ejecutada.
Los pasos para iniciar una transacción son los siguientes:
Se comienza una transacción con la sentencia START TRANSACTION.
Si se realizan modificaciones en la base de datos y queremos volver atrás y
cancelar los cambios realizados hasta el momento, utilizaremos la sentencia
ROLLBACK.
Si queremos confirmar los cambios realizados en la base de datos, utilizaremos la
sentencia COMMIT, lo cual implica también que termina la transacción.
Si queremos comenzar una nueva transacción, usaremos START TRANSACTION.
Nota: para que las transacciones funcionen correctamente, debemos utilizar tablas InnoDB.Veamos un ejemplo.
Disponemos de la tabla EMPLE, que está formada por los campos que se muestran en la imagen.
A continuación comenzamos una transacción con START TRANSACTION.
Modificamos el salario de todos los empleados de la tabla EMPLE, con la siguiente sentencia SQL.
update emple set salario=1000;
Observamos a continuación que se ha modificado el salario de todos los empleados.
Deshacemos el trabajo ya que nos hemos equivocado. Para ello utilizamos la sentencia ROLLBACK.
Y comprobamos a continuación que la tabla vuelve a su estado original.
Si queremos validar los cambios en la base de datos, completaremos la transacción con el uso de la sentencia COMMIT. Si ejecutamos ROLLBACK justo después de hacer el COMMIT, los cambios realizados sobre la base de datos permanecerán, debido a que anteriormente se validó la transacción.
Recommended