Título: Explique los 4 niveles de aislamiento del motor Mysql Innodb
Dificultad: tres estrellas
Frecuencia de entrevistas: cinco estrellas
Esta pregunta es realmente una pregunta de base de datos de alta frecuencia. Además del principio de indexación, esta pregunta tiene la frecuencia de entrevista más alta entre las preguntas de base de datos.
1. Lectura no confirmada: el nivel de aislamiento más bajo puede leer datos que no han sido confirmados por otras transacciones. También se denomina lectura sucia. Este nivel de aislamiento rara vez se utiliza. p> 2. Lectura confirmada: en comparación con la lectura no confirmada, este nivel de aislamiento solo puede leer datos enviados por otras cosas. Este nivel de aislamiento se usa con más frecuencia. Pero no es el nivel de aislamiento predeterminado de Mysql
3. Lectura repetible: en el nivel de aislamiento de lectura comprometida, si la misma variable se lee dos veces, si otras transacciones modifican su valor, las lecturas serán diferentes. . En este nivel de aislamiento, como sugiere el nombre, una transacción comienza a leerse. Se puede garantizar que el valor leído varias veces sea el mismo
4. Serialización serializable Bajo este nivel de aislamiento, todas las transacciones se operarán en serie. Es el nivel de aislamiento más alto y el menos eficiente, rara vez para uso humano.
El entrevistador preguntó: ¿Cuál es el nivel de aislamiento predeterminado del motor Innodb?
Respuesta: lectura repetible
El entrevistador preguntó: El principio de implementación de la lectura repetible
p>Respuesta: Al utilizar el control de múltiples versiones MVCC (similar al bloqueo optimista), el motor Innodb agregará información de número de versión a cada fila de datos. Cuando una transacción modifica un dato, aumentará su número de versión en +1. Cuando se inicia una transacción, el número de versión en este momento se almacenará en caché. Cuando se lea más tarde, solo se leerán los datos de este número de versión. Por lo tanto, el número de versión de los datos modificados enviados por otras transacciones es mayor. no se leerá
El entrevistador preguntó: Cómo establecer el nivel de aislamiento de la transacción:
Respuesta: Llame al comando set global.tx_isolation en la línea de comando de Mysql, pero esto falla cuando se reinicia Mysql. Modifique my.cnf para que sea permanente.
El entrevistador preguntó: ¿Cuál es el problema con la lectura relegible?
Respuesta: Se producirán lecturas fantasma. Las lecturas significan que la transacción lee un valor y no puede continuar con precisión las operaciones posteriores. Por ejemplo, si lee un valor y lo inserta si no existe, pero otras transacciones ya lo insertaron durante la inserción, esto hará que la inserción falle. La solución: la instrucción SQL muestra el bloqueo: seleccione xxxx para actualizar. , y otras transacciones se bloquearán si modifican los datos