start transaction

5
START TRANSACTION COMMIT ROLLBACK 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 COMMIT Una transacción en MySQL es una secuencia de una o más sentencias SQL que juntas forman una unidad de trabajo.

Upload: angel-rosendo-condori-coaquira

Post on 27-Jun-2015

185 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Start Transaction

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.

Page 2: Start Transaction

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.

Page 3: 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.

Page 4: Start Transaction

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.

Page 5: Start Transaction

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.