Reproducido: mysql transacción de base de datos, las lecturas sucias, lectura no repetible, las lecturas fantasma https://www.cnblogs.com/daofaziran/p/10933302.html

Transferencia: https://www.cnblogs.com/daofaziran/p/10933302.html

introducción

Sucio lee la base de datos, lectura no repetible, las lecturas fantasma tanto aislamiento y asuntos relacionados. Así que primero mirar las cuatro características principales de la transacción. 

Cuatro características principales de la transacción (ácido):

La atomicidad (atomicidad): Una transacción es una unidad lógica de base de datos de trabajo, modificar su base de datos o bien todos ejecutan o no todos. 
La consistencia (Consistemcy): antes y después de la transacción, el estado base de datos responde todas las restricciones de integridad. 
Aislamiento (aislamiento): N están aislados transacciones ejecutar concurrentemente, uno no afecta a la una en la ausencia de la confirmar una transacción, los datos modificados no pueden ser vistos por otras transacciones (mediante el establecimiento de nivel de aislamiento de base de datos). 
Persistente (Durabilidad): Actualización persistencia significa que cuando un fallo del sistema o medios de comunicación, asegúrese de que las transacciones confirmadas no se pueden perder. Persistentes DBMS rendimiento principalmente de recuperación.

Sucia de lectura:

También conocido como sucia leer lectura de datos no válido. Una transacción lee otra transacción no ha enviado los datos llamados lectura sucia.

Por ejemplo: La transacción T1 modifica una fila de datos, pero no se ha presentado, esta vez la transacción T2 lee los datos se ha modificado la transacción T1, T1 después de la transacción Rollback por alguna razón, entonces la lectura de datos de transacción T2 está sucio.

La solución: el nivel de aislamiento de base de datos se ajusta a READ_COMMITTED

lectura no repetible:

medios de lectura no repetible dentro de la misma transacción, los mismos dos consultas devuelven resultados diferentes. 
Por ejemplo: una transacción T1 datos de lectura, la transacción T2 a leer y modificar los datos, el valor de T1 con el fin de probar la lectura y leer los datos de nuevo, obtener un resultado diferente. La solución: el nivel de aislamiento de base de datos se ajusta a REPEATABLE_READ

Las lecturas fantasma:

Por ejemplo: Un administrador del sistema de base de datos en el desempeño de todos los estudiantes de puntos específicos en lugar de nivel ABCDE, pero el administrador del sistema B insertaría una puntuación registro específico en este momento, cuando el extremo del administrador del sistema Un encontró que hay un cambio grabar no cambiar durante la noche, al igual que sucedió la misma ilusión. Esto se llama lecturas fantasma.

La solución: el nivel de aislamiento de base de datos se ajusta a SERIALIZABLE_READ

Lecturas sucias, lectura no repetible, las lecturas fantasma de rango son: lectura sucia <Lectura irrepetible "lecturas fantasma. Por lo tanto, para establecer el nivel más alto de SERIALIZABLE_READ no fijaría un REPEATABLE_READ y READ_COMMITTED


 diferencia

lectura no repetible

enfoque lectura no repetible es modificar 
las mismas condiciones, había que leer los datos, leer de nuevo encuentra el valor no es el mismo

Ejemplo: En la Operación 1, Mary leyó su sueldo 1000, la operación no se ha completado

--在postresql中的例子,可能和其他的数据库略有区别
begin transaction;
select salary from employee
where id = MaryID;

En cuestiones 2, cuando el personal de finanzas modifica María salario de 2000, y presentó la transacción.

begin transaction;
update employee
set salary = 2000
where id = MaryID;
commit;

Cuando la transacción 1, Mary leyó una vez más sus salarios, el salario sube 2000

select salary 
from employee
where id = MaryID;

Los resultados antes y después de una transacción no lea los dos activados, lo que resulta en lectura no repetible.

la magia de lectura

Lectura mágica enfoque consiste en añadir o suprimir 
las mismas condiciones, dio lectura a la primera y segunda serie de registros no es lo mismo

Ejemplo: el salario actual de 1.000 empleados 10 personas. 
Transacción 1 lee todos los salarios de 1.000 empleados.

begin transaction;
select * from employee
where salary = 1000;
-- 共读取10条记录 

Luego otra transacción inserta un registro de los empleados a la tabla de empleados, el salario de 1000

begin transaction;
insert into employee(,salary,)
values(,1000,);
commit;

Transacción 1 lee de nuevo todos los salarios de los empleados 1000

--事务1
select * from employee
where salary = 1000;
--共读取到了11条记录

Esto crea una lectura fantasma.

Publicados 301 artículos originales · 197 fue elogiado · vistas 270 000 +

Supongo que te gusta

Origin blog.csdn.net/boss_way/article/details/105165744
Recomendado
Clasificación