Sunteți pe pagina 1din 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 oROLLBACK. 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.) ConsulteSeccin 5.10.3, El
registro binario (Binary Log).
Puede cambiar el nivel de aislamiento para transacciones con SET TRANSACTION ISOLATION
LEVEL. ConsulteSeccin 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).

S-ar putea să vă placă și