Joaquín, parte de nuestro equipo de trabajo, nos ha hecho el favor de crear este artículo porque domina perfectamente este tema.
Sintaxis
STARTTRANSACTION[transaction_property [, transaction_property]...]|BEGIN[WORK]COMMIT[WORK][AND[NO]CHAIN][[NO]RELEASE]ROLLBACK[WORK][AND[NO]CHAIN][[NO]RELEASE]SET autocommit = 1 transaction_property: WITHCONSISTENTSNAPSHOT|READWRITE|READ ONLY
Descripción
los START TRANSACTION
o BEGIN
estado de cuenta comienza una nueva transacción. COMMIT confirma la transacción actual, haciendo que sus cambios sean permanentes. ROLLBACK revierte la transacción actual, cancelando sus cambios. La instrucción SETautocommit deshabilita o habilita el modo de confirmación automática predeterminado para la sesión actual.
START TRANSACTION y SET autocommit = 1 implícitamente confirman la transacción actual, si existe.
El opcional WORK
la palabra clave es compatible con COMMIT
y ROLLBACK
, como son los CHAIN
y RELEASE
cláusulas. CHAIN
y RELEASE
se puede utilizar para un control adicional sobre la finalización de la transacción. El valor de la variable de sistema complete_type determina el comportamiento de finalización predeterminado.
los AND CHAIN
hace que una nueva transacción comience tan pronto como finalice la actual, y la nueva transacción tiene el mismo nivel de aislamiento que la transacción que acaba de terminar. los RELEASE
La cláusula hace que el servidor desconecte la sesión actual del cliente después de terminar la transacción actual. Incluyendo el NO
suprime palabras clave CHAIN
o RELEASE
completado, que puede ser útil si la variable de sistema complete_type está configurada para causar el encadenamiento o la finalización de la liberación de forma predeterminada.
Modo de acceso
MariaDB comenzando con 10.0
Estas cláusulas aparecieron en MariaDB 10.0.
El modo de acceso especifica si la transacción puede escribir datos o no. Por defecto, las transacciones están en READ WRITE
mode (ver la variable de sistema tx_read_only). READ ONLY
El modo permite que el motor de almacenamiento aplique optimizaciones que no se pueden utilizar para transacciones que escriben datos. La única excepción a esta regla es que las transacciones de solo lectura pueden realizar declaraciones DDL en tablas temporales.
No está permitido especificar ambos READ WRITE
y READ ONLY
en la misma declaración.
READ WRITE
y READ ONLY
también se puede especificar en el SET TRANSACTION
declaración, en cuyo caso el modo especificado es válido para todas las sesiones, o para todas las transacciones posteriores utilizadas por la sesión actual.
autocommit
De forma predeterminada, MariaDB se ejecuta con el modo de confirmación automática habilitado. Esto significa que tan pronto como ejecuta una declaración que actualiza (modifica) una tabla, MariaDB almacena la actualización en el disco para que sea permanente. Para deshabilitar el modo de confirmación automática, utilice la siguiente declaración:
SET autocommit=0;
Después de deshabilitar el modo de confirmación automática estableciendo la variable de confirmación automática en cero, los cambios en las tablas de transacciones seguras (como las de InnoDB o NDBCLUSTER
) no se vuelven permanentes de inmediato. Debes usar COMMIT
para almacenar sus cambios en el disco o ROLLBACK para ignorar los cambios.
Para deshabilitar el modo de confirmación automática para una sola serie de declaraciones, use el START TRANSACTION
declaración.
Declaraciones DDL
Declaraciones DDL (CREATE, ALTER, DROP) y declaraciones administrativas (FLUSH
, RESET
, OPTIMIZE
, ANALYZE
, CHECK
, REPAIR
, CACHE INDEX
), y LOAD DATA INFILE
, causa un implícito COMMIT
e iniciar una nueva transacción. Una excepción a esta regla son los DDL que operan en tablas temporales: puede CREATE
, ALTER
y DROP
ellos sin causar ninguna COMMIT
, pero esas acciones no se pueden revertir. Esto significa que si llamas ROLLBACK
, las tablas temporales que creó en la transacción permanecerán, mientras que el resto de la transacción se revertirá.
Las transacciones no se pueden utilizar en funciones almacenadas o activadores. En Procedimientos y eventos almacenados, BEGIN no está permitido, por lo que debe usar START TRANSACTION en su lugar.
Una transacción adquiere un bloqueo de metadatos en cada tabla a la que accede para evitar que otras conexiones alteren su estructura. El bloqueo se libera al final de la transacción. Esto sucede incluso con motores de almacenamiento no transaccionales (como MEMORY o CONNECT), por lo que tiene sentido utilizar transacciones con tablas no transaccionales.
in_transaction
MariaDB comenzando con 5.3
La variable de sistema in_transaction apareció en MariaDB 5.3.
Es una variable de solo sesión y solo lectura que devuelve 1
dentro de una transacción, y 0
si no en una transacción.
CON INSTANTÁNEA CONSISTENTE
los WITH CONSISTENT SNAPSHOT
La opción inicia una lectura coherente para motores de almacenamiento como XtraDB e InnoDB que pueden hacerlo, lo mismo que si se emitiera un START TRANSACTION seguido de un SELECT de cualquier tabla InnoDB.
MariaDB comenzando con 5.3
MariaDB 5.3 introdujo mejoras en esta función. Consulte Mejoras para INICIAR TRANSACCIÓN CON INSTANTÁNEA CONSISTENTE.
Ejemplos de
STARTTRANSACTION;SELECT@A:=SUM(salary)FROM table1 WHEREtype=1;UPDATE table2 SET summary=@AWHEREtype=1;COMMIT;
Ver también
- Mejoras para INICIAR TRANSACCIÓN CON INSTANTÁNEA CONSISTENTE
- MyRocks e INICIE LA TRANSACCIÓN CON UNA INSTANTÁNEA CONSISTENTE
El contenido reproducido en este sitio es propiedad de sus respectivos dueños, y MariaDB no revisa este contenido con anticipación. Los puntos de vista, la información y las opiniones expresadas por este contenido no representan necesariamente las de MariaDB o de cualquier otra parte.