Los conceptos y características de las transacciones de la base de datos mysql y la sintaxis y el proceso de ejecución de transacciones en MySQL.

Conceptos y características de transacciones de bases de datos.

Una transacción de base de datos es un mecanismo, una secuencia de operaciones e incluye un conjunto de comandos de operación de la base de datos. Una transacción envía o revoca una solicitud de operación al sistema junto con todos los comandos en su conjunto, es decir, este conjunto de comandos de la base de datos se ejecuta o no se ejecuta, por lo que la transacción es una unidad lógica de trabajo indivisible.

Cuando se realizan operaciones concurrentes en un sistema de base de datos, las transacciones se utilizan como la unidad de control más pequeña, lo que es especialmente adecuado para sistemas de bases de datos operados por múltiples usuarios al mismo tiempo. Por ejemplo, sistemas de reserva de aerolíneas, bancos, compañías de seguros y sistemas de negociación de valores.

Las transacciones tienen cuatro características, a saber, atomicidad, consistencia, aislamiento y durabilidad, que generalmente se denominan ACID.

1. Atomicidad

Una transacción es una operación completa. Los elementos de una transacción son indivisibles (atómicos). Todos los elementos de la transacción deben confirmarse o revertirse en su conjunto. Si algún elemento de la transacción falla, toda la transacción falla.

Tomando como ejemplo la transacción de transferencia bancaria, si se envía la transacción, se actualizarán los datos de las dos cuentas. Si por alguna razón la transacción finaliza antes de actualizar exitosamente ambas cuentas, los saldos de ambas cuentas no se actualizarán, las modificaciones a los saldos de las cuentas se desharán y la transacción no se podrá confirmar parcialmente.

2. Consistencia

Cuando se completa la transacción, los datos deben estar en un estado consistente. Es decir, los datos almacenados en la base de datos están en un estado consistente antes de que comience la transacción. Durante una transacción en curso, los datos pueden estar en un estado inconsistente; por ejemplo, los datos pueden modificarse parcialmente. Sin embargo, cuando la transacción se completa con éxito, los datos deben devolverse nuevamente a un estado consistente conocido. Las modificaciones realizadas a los datos a través de transacciones no pueden dañar los datos, o las transacciones no pueden dejar el almacenamiento de datos en un estado inestable.

Tomemos como ejemplo la transacción de transferencia bancaria. Antes de que comience la transacción, el total de todos los saldos de las cuentas se encuentra en un estado consistente. Durante el transcurso de la transacción, el saldo de una cuenta se reduce, mientras que el saldo de la otra cuenta no se modifica. Por lo tanto, el total de todos los saldos de cuentas es inconsistente. Una vez completada la transacción, el saldo total de la cuenta se restablece nuevamente a un estado consistente.

3. Aislamiento

Todas las transacciones concurrentes que modifican datos están aisladas entre sí, lo que significa que las transacciones deben ser independientes y no deben depender ni afectar a otras transacciones de ninguna manera. Una transacción que modifica datos puede acceder a los datos antes de que comience otra transacción que use los mismos datos, o después de que finalice otra transacción que use los mismos datos.

Además, cuando una transacción modifica datos, si cualquier otro proceso utiliza los mismos datos al mismo tiempo, las modificaciones a los datos no tendrán efecto hasta que la transacción se confirme con éxito. La transferencia entre Zhang San y Li Si y la transferencia entre Wang Wu y Zhao Er son siempre independientes entre sí.

4. Durabilidad

La durabilidad de las transacciones significa que, independientemente de si el sistema falla o no, los resultados del procesamiento de las transacciones son permanentes.

Una vez que una transacción se completa con éxito, los cambios que realiza en la base de datos son permanentes, incluso si el sistema falla. Es decir, una vez confirmada la transacción, cualquier cambio realizado en los datos por la transacción se retendrá permanentemente en la base de datos.

El principio ACID de las transacciones garantiza que una transacción se confirme con éxito o falle y se revierta, o una de las dos. Por tanto, sus modificaciones en la transacción son recuperables. Es decir, cuando una transacción falla, sus modificaciones de datos se restaurarán al estado anterior a la ejecución de la transacción.

Sintaxis y proceso de ejecución de transacciones MySQL

MySQL proporciona múltiples motores de almacenamiento para admitir transacciones. Los motores de almacenamiento que admiten transacciones incluyen InnoDB y BDB. Las transacciones del motor de almacenamiento InnoDB se implementan principalmente a través de registros UNDO y REDO. El motor de almacenamiento MyISAM no admite transacciones.

Expansión: cualquier tipo de base de datos tendrá varios registros para registrar el estado de ejecución, las operaciones diarias, los mensajes de error, etc. de la base de datos, y MySQL no es una excepción. Por ejemplo, cuando el usuario raíz inicia sesión en el servidor MySQL, la hora de inicio de sesión del usuario, las operaciones de ejecución, etc. se registrarán en el archivo de registro.

Para mantener el servidor MySQL, a menudo es necesario realizar operaciones de registro en la base de datos MySQL:

  • Registro de DESHACER: copia los datos antes de que se ejecute la transacción y se utiliza para revertir los datos cuando ocurre una excepción en la transacción.
  • Registro REDO: registra cada operación que actualiza los datos durante la ejecución de la transacción. Cuando se confirma la transacción, el contenido se vacía en el disco.

Práctica completa de habilidades básicas de la base de datos Mysql icono-default.png?t=N7T8https://edu.csdn.net/course/detail/36210
Según la configuración predeterminada, cada declaración SQL es una transacción, es decir, se envía automáticamente después de ejecutar la declaración SQL. Para combinar varias operaciones en su conjunto, debe utilizar BEGIN o START TRANSACTION para iniciar una transacción, o desactivar el envío automático de la sesión actual.

Para obtener información sobre el envío automático de transacciones, puede leer la sección  " MySQL Configuración del envío automático de transacciones ".

Sintaxis y proceso para ejecutar transacciones.

SQL utiliza las siguientes declaraciones para gestionar transacciones.

1) Iniciar transacción
BEGIN;

 o

START TRANSACTION;

Esta declaración marca explícitamente el punto de partida de una transacción.

2) Enviar transacción

MySQL usa la siguiente declaración para confirmar una transacción:

COMMIT;

COMMIT significa confirmar una transacción, es decir, confirmar todas las operaciones de la transacción. Específicamente, todas las actualizaciones de la base de datos en la transacción se escriben en la base de datos física en el disco y la transacción finaliza normalmente.

Confirmar una transacción significa que todos los datos ejecutados desde el comienzo de la transacción se modificarán y se convertirán en una parte permanente de la base de datos, marcando así también el final de una transacción. Una vez que se ejecuta este comando, la transacción no se puede revertir. Esta operación se realiza solo cuando todas las modificaciones están listas para enviarse a la base de datos.

3) Revertir (deshacer) transacción

MySQL revierte la transacción usando la siguiente declaración:

ROLLBACK;

ROLLBACK significa cancelar la transacción, es decir, ocurre algún tipo de falla durante la ejecución de la transacción y la transacción no puede continuar ejecutándose. El sistema deshará todas las operaciones completadas en la base de datos en la transacción y volverá al estado al principio. de la transacción. La operación aquí se refiere a la operación de actualización en la base de datos.

Cuando se encuentre un error durante la ejecución de la transacción, utilice la instrucción ROLLBACK para revertir la transacción al punto de inicio o a un punto de retención especificado. Al mismo tiempo, el sistema borrará todas las modificaciones de datos realizadas desde el punto de inicio de la transacción o hasta un determinado punto de guardado y liberará los recursos controlados por la transacción. Por tanto, esta declaración también marca el final de la transacción.

Resumir

Las operaciones de actualización de los datos de la base de datos mediante las declaraciones SQL que siguen a la declaración BEGIN o START TRANSACTION se registrarán en el registro de transacciones hasta que se encuentre la declaración ROLLBACK o COMMIT. Si una operación en la transacción falla y se ejecuta una declaración ROLLBACK, todos los datos actualizados después de abrir la declaración de la transacción se pueden revertir al estado anterior al inicio de la transacción. Si todas las operaciones de la transacción se completan correctamente y se utiliza la declaración COMMIT para enviar datos actualizados a la base de datos, los datos en este momento se encuentran en un nuevo estado consistente.

Demostración de ejemplo

A continuación se muestran dos ejemplos para demostrar el uso específico de las transacciones MySQL.

Ejemplo 1

Lo siguiente simula el escenario en el que otras sesiones acceden a la tabla de datos después de que la cuenta de Zhang San disminuye en 500 yuanes pero la cuenta de Li Si no ha aumentado en 500 yuanes. Dado que el código debe ejecutarse en dos ventanas, para facilitar la lectura, aquí las llamamos ventana A y ventana B.

1) Abra una transacción en la ventana A y actualice los datos de la tabla bancaria en la base de datos mybank. La declaración SQL y los resultados de ejecución son los siguientes:

mysql> USE mybank;
Database changed
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE bank SET currentMoney = currentMoney-500
    -> WHERE customerName='张三';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

2) Consulte los datos en la tabla de datos bancarios en la ventana B. La declaración SQL y los resultados de ejecución son los siguientes:

mysql> SELECT * FROM mybank.bank;
+--------------+--------------+
| customerName | currentMoney |
+--------------+--------------+
| 张三         |      1000.00 |
| 李四         |         1.00 |
+--------------+--------------+
2 rows in set (0.00 sec)

Se puede ver en los resultados que, aunque la transacción en la ventana A cambió los datos en la tabla bancaria, los datos no se actualizan de inmediato, en este momento otras sesiones aún leen los datos antes de la actualización.

3) Continúe ejecutando la transacción en la ventana A y envíe la transacción. La declaración SQL y los resultados de la ejecución son los siguientes:

mysql> UPDATE bank SET currentMoney = currentMoney+500
    -> WHERE customerName='李四';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> COMMIT;
Query OK, 0 rows affected (0.07 sec)

4) Vuelva a consultar los datos de la tabla de datos bancarios en la ventana B. La declaración SQL y los resultados de la ejecución son los siguientes:

mysql> SELECT * FROM mybank.bank;
+--------------+--------------+
| customerName | currentMoney |
+--------------+--------------+
| 张三         |       500.00 |
| 李四         |       501.00 |
+--------------+--------------+
2 rows in set (0.00 sec)

Después de ejecutar COMMIT para confirmar la transacción en la ventana A, las actualizaciones de los datos se enviarán juntas y otras sesiones leerán los datos actualizados. Se puede ver en los resultados que el saldo total de la cuenta de Zhang San y Li Si permanece consistente con el anterior a la transferencia, de modo que los datos se actualizan de un estado de consistencia a otro.

Como se mencionó anteriormente, cuando ocurre un problema durante la ejecución de la transacción, es decir, cuando una transacción completa no se puede ejecutar de acuerdo con el proceso normal, puede usar la instrucción ROLLBACK para retroceder y usar los datos para restaurar al estado inicial.

En el ejemplo 1, el saldo de la cuenta de Zhang San se redujo a 500 yuanes. Si se transfieren otros 1000 yuanes, el saldo será negativo, por lo que es necesario revertirlo al estado original. Como se muestra en el Ejemplo 2.

Ejemplo 2

Reduzca el saldo de la cuenta de Zhang San en 1000 yuanes y revierta la transacción. La declaración SQL y los resultados de ejecución son los siguientes:

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
 
mysql> UPDATE bank SET currentMoney = currentMoney-1000 WHERE customerName='张三';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0
 
mysql> ROLLBACK;
Query OK, 0 rows affected (0.07 sec)
 
mysql> SELECT * FROM mybank.bank;
+--------------+--------------+
| customerName | currentMoney |
+--------------+--------------+
| 张三         |       500.00 |
| 李四         |       501.00 |
+--------------+--------------+
2 rows in set (0.00 sec)

Se puede ver en los resultados que después de ejecutar la reversión de la transacción, los datos de la cuenta se restauran al estado inicial, es decir, al estado antes de que se ejecutara la transacción.

expandir

En las operaciones de bases de datos, para garantizar eficazmente la exactitud de los datos leídos simultáneamente, se propone el nivel de aislamiento de las transacciones. En las demostraciones del Ejemplo 1 y el Ejemplo 2, el nivel de aislamiento de la transacción es el nivel de aislamiento predeterminado. En MySQL, el nivel de aislamiento predeterminado de una transacción es el nivel de aislamiento REPEATABLE-READ (relegible), es decir, cuando la transacción no finaliza (COMMIT o ROLLBACK no se ejecuta), otras sesiones solo pueden leer datos no confirmados.

Haga clic en Niveles de aislamiento de transacciones de MySQL para obtener más información.

Precauciones

La transacción MySQL es una función que consume muchos recursos, debe prestar atención a los siguientes puntos al usarla.

1) Mantenga las transacciones lo más breves posible

Desde el principio hasta el final de una transacción, se reservará una gran cantidad de recursos en el sistema de gestión de la base de datos para garantizar la atomicidad, coherencia, aislamiento y durabilidad de la transacción. Si se trata de un sistema multiusuario, las grandes transacciones ocuparán una gran cantidad de recursos del sistema, lo que abrumará el sistema, afectará el rendimiento de ejecución del software e incluso provocará que el sistema falle.

2) Se debe minimizar la cantidad de datos a los que se accede en la transacción.

Cuando las transacciones se ejecutan simultáneamente, cuanto menor sea la cantidad de datos con los que opera la transacción, menos operaciones se realizarán con los mismos datos entre transacciones.

3) Intente no utilizar transacciones al consultar datos

La navegación y la consulta de datos no actualizarán los datos en la base de datos, por lo que debe intentar no utilizar transacciones para consultar datos para evitar ocupar recursos excesivos del sistema.

4) Intente no esperar la entrada del usuario durante el procesamiento de la transacción.

Durante el procesamiento de la transacción, si necesita esperar a que el usuario ingrese datos, la transacción ocupará recursos durante mucho tiempo y puede causar congestión del sistema.

Capacitación práctica de base de datos mysql de ingeniero senior de bases de datos de Dachang icono-default.png?t=N7T8https://edu.csdn.net/course/detail/39021 

Supongo que te gusta

Origin blog.csdn.net/m0_37449634/article/details/135554108
Recomendado
Clasificación