[Serie SQL] Aprenda PostgreSQL desde cero y aprenda desde el nivel de aislamiento de MYSQL

El nivel de aislamiento de SQL se refiere al grado en que las transacciones están aisladas entre sí en la base de datos. Después de que la transacción A modifica un determinado dato, ¿qué pasará si la transacción B lee los datos en este momento? Esto depende de la configuración del nivel de aislamiento de la base de datos.
Los tipos de niveles de aislamiento de transacciones comúnmente utilizados incluyen los siguientes:

  1. LEER NO COMPROMETIDO (leer no comprometido): este nivel de aislamiento permite leer las modificaciones realizadas por transacciones no confirmadas, pero las transacciones no confirmadas no pueden leer las modificaciones realizadas por transacciones comprometidas. Por lo tanto, este nivel de aislamiento puede causar problemas con lecturas sucias y lecturas no repetibles.
  2. LEER COMPROMETIDA (lectura comprometida): este nivel de aislamiento solo permite leer modificaciones realizadas por transacciones comprometidas, pero no modificaciones realizadas por transacciones no confirmadas. Por lo tanto, este nivel de aislamiento puede evitar problemas de lectura sucia, pero puede causar problemas de lectura no repetibles.
  3. LECTURA REPETIBLE: este nivel de aislamiento permite leer las modificaciones realizadas por transacciones confirmadas y los resultados permanecen consistentes cuando la misma transacción lee los mismos datos varias veces. Por lo tanto, este nivel de aislamiento puede evitar el problema de las lecturas no repetibles, pero puede provocar lecturas fantasma.
  4. SERIALIZABLE: este nivel de aislamiento equivale a que todas las transacciones se ejecuten en serie, lo que puede evitar todos los problemas de concurrencia, pero afectará seriamente el rendimiento.

Primero necesitas entender algunos términos:

1. Lectura sucia: en una ventana de transacción, antes de que no se confirme ninguna modificación de datos, otra transacción puede ver la modificación de la página de datos en la memoria. Es decir, la información de datos que otros no han enviado se puede leer en la ventana de transacción.

Por ejemplo, la transacción A modificó un dato pero aún no lo envió.

La transacción B lee este valor modificado

En este momento, la transacción A se revirtió repentinamente.

La transacción B equivale a leer datos que no existen.

2. Lectura no repetible: se refiere a la situación en la que dentro de un período de quince años, los datos únicos iniciales son inconsistentes con el mismo lote de datos leídos en cualquier momento antes del final de la transacción.

Por ejemplo, la transacción A lee un dato varias veces,

La transacción B actualizó los datos en ella y se comprometió.

Los resultados de múltiples lecturas de la transacción A son diferentes.

3. Lectura fantasma: cuando las transacciones no se ejecutan de forma independiente, una transacción modifica los datos de una tabla y esta modificación involucra todas las filas de datos de la tabla. Por ejemplo, la primera transacción lee todas las filas de la tabla y luego la segunda transacción inserta una nueva fila de datos, lo que hace que las filas de datos leídas por la primera transacción estén incompletas, lo que da como resultado una lectura fantasma.

Los números obtenidos por las dos selecciones son diferentes, por ejemplo, la primera selección obtiene 10 filas y la segunda selección obtiene 20 filas.

Por ejemplo, cuando la transacción A selecciona datos por primera vez, obtiene 5 filas de datos.

La transacción B insertó 5 filas en este momento

En la segunda transacción Aselect data se obtuvieron 10 filas de datos. Si originalmente se pretendía que la inserción comenzara desde la fila 6, habría un conflicto en este momento.

nivel de aislamiento  lectura sucia lectura no repetible lectura fantasma
Leer no comprometido ocurrir      ocurrir ocurrir
Leer enviado no sucede ocurrir ocurrir
lectura repetible no sucede no sucede Resuelto en el bloqueo de la siguiente tecla
lectura en serie no sucede no sucede no sucede

Para lectura no confirmada, los datos modificados en la transacción no se han confirmado pero serán vistos por otras transacciones.

Las lecturas sucias son inevitables, al igual que las lecturas no repetibles y también las lecturas fantasma.

Para lectura confirmada, los datos modificados en la transacción serán vistos por otras transacciones solo después de que se envíen.

Las lecturas sucias se pueden evitar por completo, pero sería incorrecto si se cometieran durante lecturas repetidas, por lo que no se pueden evitar las lecturas no repetibles y las lecturas fantasma.

Para lecturas repetibles, se pueden evitar lecturas sucias y lecturas no repetibles.

Read View es una vista creada por MySQL bajo el nivel de aislamiento de lectura repetible, que proporciona una instantánea de datos consistente para cada transacción. La vista de lectura registra todos los ID de transacción que estaban activos al comienzo de la transacción. A través de la Vista de lectura, las transacciones pueden leer filas de datos antes de que otras transacciones las modifiquen, logrando así una lectura y servicio repetibles de mvcc.

Para la serialización, todas las transacciones se ejecutarán en serie, lo que puede evitar todos los problemas de concurrencia, pero la eficiencia es muy baja.

Supongo que te gusta

Origin blog.csdn.net/u013379032/article/details/131904979
Recomendado
Clasificación