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.