Anda di halaman 1dari 2

13.4.1.

Sintaxis de START TRANSACTION, COMMIT y ROLLBACK


Por defecto, MySQL se ejecuta con el modo autocommit activado. Esto significa que en cuanto ejecute un comando que actualice (modifique) una tabla, MySQL almacena la actualizacin en disco. Si usa tablas transaccionales (como InnoDB o BDB), puede desactivar el modo autocommit con el siguiente comando:
SET AUTOCOMMIT=0;

Tras deshabilitar el modo autocommit poniendo la variable AUTOCOMMIT a cero, debe usar COMMIT para almacenar los cambios en disco o ROLLBACK si quiere ignorar los cambios hechos desde el comienzo de la transaccin. Si quiere deshabilitar el modo autocommit para una serie nica de comandos, puede usar el comando START TRANSACTION:
START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT;

Con START TRANSACTION, autocommit permanece deshabilitado hasta el final de la transaccin con COMMIT o ROLLBACK. El modo autocommit vuelve a su estado prvio.
BEGIN y BEGIN WORK se soportan como alias para START TRANSACTION para iniciar una transaccin. START TRANSACTION es sintaxis SQL estndar y es la forma recomendada para iniciar una transaccin ad-hoc . El comando BEGIN difiere del uso de la palabra clave BEGIN que comienza un comando compuesto BEGIN ... END. El ltimo no comienza una transaccin. Consulte Seccin 19.2.7, Sentencia compuesta BEGIN ... END.

Puede comenzar una transaccin as:


START TRANSACTION WITH CONSISTENT SNAPSHOT;

La clusula WITH CONSISTENT SNAPSHOT comienza una lectura consistente para motores de almacenamiento capaces de ello. Actualmente, esto se aplica slo a InnoDB. El efecto es el mismo que realizar un START TRANSACTION seguido por un SELECT desde cualquier tabla InnoDB . Consulte Seccin 15.10.4, Lecturas consistentes que no bloquean. Comenzar una transaccin provoca que se realice un UNLOCK TABLES implcito.

Tenga en cuenta que si no usa tablas transaccionales, cualquier cambio se almacena de golpe, a pesar del estado del modo autocommit . Si realiza un comando ROLLBACK tras actualizar una tabla no transaccional dentro de una transaccin, ocurre una advertencia ER_WARNING_NOT_COMPLETE_ROLLBACK. Los cambios en tablas transaccionales se deshacen, pero no los cambios en tablas no transaccionales. Cada transaccin se almacena en el log binario en un trozo, hasta COMMIT. Las transacciones que se deshacen no se loguean. (Excecin: Las modificaciones a tablas no transaccionales no pueden deshacerse. Si una transaccin que se deshace incluye modificaciones a tablas no transaccionales, la transaccin entera se loguea con un comando ROLLBACK al final para asegurar que las modificaciones a estas tablas se replican.) Consulte Seccin 5.10.3, El registro binario (Binary Log). Puede cambiar el nivel de aislamiento para transacciones con SET TRANSACTION ISOLATION LEVEL. Consulte Seccin 13.4.6, Sintaxis de SET TRANSACTION. Deshacer puede ser una operacin lenta que puede ocurrir sin que el usuario lo haya pedido explcitamente (por ejemplo, cuando ocurre un error). Debido a ello, SHOW PROCESSLIST en MySQL 5.0 muestra Rolling back en la columna Statepara la conexin durante rollbacks implcitos y explcitos (comando SQL ROLLBACK).

Anda mungkin juga menyukai