Transacciones del marco de primavera

1. ¿Qué es una transacción?

Transacción: Es la unidad de trabajo más pequeña para operaciones de base de datos, es una serie de operaciones ejecutadas como una sola lógica, estas operaciones se envían al sistema como un todo, o se ejecutan todas o no se ejecuta ninguna, una transacción es un conjunto de operaciones indivisibles.

Las transacciones son la unidad básica de recuperación y control de concurrencia.

Las transacciones tienen cuatro características: atomicidad, consistencia, aislamiento y durabilidad. Estas cuatro características a menudo se denominan ÁCIDA.

2. Características de las transacciones (ACID)

Atomicidad: todas las operaciones de una transacción se completan o no y no finalizarán en ninguna etapa intermedia. Si se produce un error durante la ejecución de la transacción, se revertirá al estado anterior al inicio de la transacción, como si la transacción nunca se hubiera ejecutado. Es decir, las transacciones son indivisibles e irreductibles.

Consistencia: la integridad de la base de datos no se ve comprometida antes de que comience la transacción y después de que finalice. Esto significa que los datos escritos deben cumplir plenamente con todas las restricciones preestablecidas, activadores, reversiones en cascada, etc.

Aislamiento: la capacidad de la base de datos para permitir que múltiples transacciones simultáneas lean, escriban y modifiquen sus datos al mismo tiempo. El aislamiento puede evitar la inconsistencia de los datos debido a la ejecución cruzada cuando se ejecutan múltiples transacciones simultáneamente. El aislamiento de transacciones se divide en diferentes niveles, que incluyen lectura no confirmada (lectura no confirmada), lectura confirmada (lectura confirmada), lectura repetible (lectura repetible) y serializable (serializable).
Durabilidad: Una vez completada la transacción, las modificaciones a los datos son permanentes y no se perderán incluso si el sistema falla.

3. Nivel de aislamiento de transacciones

Hay cuatro niveles de aislamiento para las transacciones de bases de datos, de menor a mayor: lectura no confirmada, lectura confirmada y lectura repetible.Serializable. Además, pueden producirse lecturas sucias, lecturas no repetibles, lecturas fantasma y pérdidas de transacciones durante transacciones concurrentes.

Lectura sucia: (se leyó una nueva transacción no confirmada y luego se revirtió)
La transacción A leyó datos no confirmados en la transacción B. Si la transacción B se revierte, la lectura de A utiliza datos incorrectos.

Lectura no repetible: (leer la nueva transacción enviada se refiere a la operación de actualización)
Lectura no repetible significa que para ciertos datos en la base de datos, varias consultas dentro de un rango de transacciones devuelven valores de datos diferentes. Esto se debe al intervalo de consulta, modificado y cometido por otra transacción.
Lectura fantasma: (también lee la nueva transacción enviada, que se refiere a la operación adicional)
En la composición de múltiples lecturas de la transacción A, la transacción B realizó nuevas operaciones en los datos, lo que resultó en datos inconsistentes leídos por la transacción A varias veces.

El primer tipo de pérdida de cosas: (llamada pérdida de reversión)

Para el primer tipo de pérdida de cosa, por ejemplo, A y B están ejecutando un dato al mismo tiempo, y luego la cosa B ha sido enviada, y luego la cosa A se revierte, por lo que la operación de la cosa B se pierde debido a la reversión de la cosa A, y el segundo tipo de cosa se pierde
Pérdida: (Pérdida de cobertura de envío )
Para el segundo tipo de pérdida de cosa, también llamada pérdida de cobertura, es decir, A y 8 ejecutan datos juntos, y ambos obtienen un dato al mismo tiempo, y luego el elemento B se envía primero, pero se agrega un elemento A y luego se envía. , cubriendo así el elemento B

Leer no comprometido
, como sugiere el nombre, significa que una transacción puede leer los datos de otra transacción no confirmada. Se producirán lecturas sucias.
Lectura confirmada
, como su nombre indica, significa que una transacción debe esperar a que se confirme otra transacción antes de poder leer datos. Se producirán lecturas no repetibles.
Lectura repetible
significa que cuando se comienza a leer datos (se inicia la transacción), ya no se permiten operaciones de modificación. Puede ocurrir una lectura fantasma.
Serializable
Serlalizable es el nivel más alto de aislamiento de transacciones. En este nivel, las transacciones se ejecutan en serie y secuencialmente, lo que puede evitar lecturas sucias, lecturas no repetibles y lecturas fantasma. Sin embargo, este nivel de aislamiento de transacciones es ineficiente y consume el rendimiento de la base de datos, por lo que generalmente no se utiliza.

El nivel de aislamiento de transacciones predeterminado de la mayoría de las bases de datos es Lectura confirmada, como SQL Server y Oracle. El
nivel de aislamiento predeterminado de Mysal es Lectura repetible.

4. Comportamiento de propagación de transacciones (para resolver el problema de las transacciones de llamarse entre sí entre métodos de la capa empresarial):

Cuando otro método de transacción llama a un método de transacción, debe especificar cómo se debe propagar la transacción. Por ejemplo: el método puede continuar ejecutándose en la transacción existente o puede iniciar una nueva transacción y ejecutarse en su propia transacción. La definición de TransactionDefinition incluye las siguientes constantes que representan el comportamiento de propagación:

1. PROPAGATION_REQUIRED: Tipo de transacción predeterminado, si no, cree una nueva transacción, si la hay, agregue la transacción actual. Adecuado para la mayoría de situaciones.

2. PROPAGATION_REQUIRES_NEW: Si no hay transacción, cree una nueva transacción, si la hay, suspenda la transacción actual.

3. PROPAGATION_NESTED: Si no, crea una nueva transacción, si la hay, anida otras transacciones en la transacción actual.

4. SOPORTES DE PROPAGACIÓN: Si no, ejecute en modo no transaccional: Si es así, use la transacción actual

5. PROPAGACIÓN NO SOPORTADA: Si no, ejecute en modo no transaccional. En caso afirmativo, suspenda la transacción actual. Es decir, las transacciones no son compatibles de todos modos.
6. PROPAGATION_NEVER: Si no, ejecuta de manera no transaccional. Si es así, lanza una excepción.

7. PROPAGACIÓN OBLIGATORIA: Si no, lanza una excepción. Si es así, usa la transacción actual.

Resumir:

[1] vida y muerte sin ningún asunto

PROPAGACIÓN NUNCA: Si no, la transacción no se ejecutará, y si la hay, se lanzará una excepción.

PROPAGATION_NOT_SUPPORTED: Si no, será una ejecución sin transacción, si es así, se suspenderá directamente y luego será una ejecución sin transacción.

[2] Dispensable

SOPORTES DE PROPAGACIÓN: Úsalo si lo tienes, olvídalo si no lo tienes

[3] Debe tener aventuras

PROPAGATION_REQUIRES_NEW: Crea una nueva transacción si hay una. Si hay una, suspende la original. PROPAGATION_NESTED: Si no hay ninguna, crea una nueva transacción. Si hay una, anida otras transacciones en la transacción actual. PROPAGACIÓN REQUERIDA: Si no hay nadie, crea una nueva transacción. ;Si la hay, únete a la transacción actual. PROPAGACIÓN OBLIGATORIA: Si no la hay, lanza una excepción, si la hay, usa la transacción actual.

Lo que hay que señalar aquí es que los seis comportamientos de propagación de transacciones anteriores fueron introducidos por Spring desde EJB y comparten los mismos conceptos. Y PROPAGATION_NESTED es exclusivo de Spring. La transacción iniciada con PROPAGATION_NESTED está integrada en la transacción externa (si hay una transacción externa). En este momento, la transacción integrada no es una transacción independiente. Depende de la existencia de la transacción externa. Solo mediante el envío de la transacción externa. La transacción puede ser causada por una transacción interna. El envío de transacciones, las subtransacciones anidadas no se pueden enviar por separado. Si está familiarizado con el concepto de SavePoint en JDBC, las transacciones anidadas son fáciles de entender. De hecho, las subtransacciones anidadas son una aplicación de puntos de guardado. Una transacción puede incluir múltiples puntos de guardado y cada subtransacción de transacción anidada. Además, la reversión de transacciones externas también provocará la reversión de subtransacciones anidadas.
 

Supongo que te gusta

Origin blog.csdn.net/WJY898989/article/details/130098015
Recomendado
Clasificación