Resumen de la entrevista: 10 preguntas sobre asuntos de MySQL Preguntas y respuestas comunes de la entrevista (FQA)

Aprender la base de datos relacional MySQL es un buen punto de partida. La mayoría de las personas están acostumbradas a CRUD en su trabajo. ¿Todavía puede responder el alma del alma del entrevistador? Necesitamos comprender algunos fundamentos más profundos de la base de datos.

El artículo se actualiza continuamente cada semana, y los "tres consecutivos" de todos son la mayor afirmación para mí. Puede buscar en la cuenta pública de WeChat "escuela de tecnología back-end" por primera vez (generalmente actualizada una o dos antes que el blog)

Después de terminar la entrevista, 10 preguntas frecuentes (preguntas frecuentes) sobre el motor de almacenamiento y transacciones de MySQL, desea saber aquí.

¿Qué es una transacción?

Una transacción es "un conjunto de consultas SQL atómicas", o una unidad de trabajo independiente. Si el motor de la base de datos puede aplicar con éxito todas las declaraciones del conjunto de consultas a la base de datos, ejecute el conjunto de consultas. Si alguna de las declaraciones no se puede ejecutar debido a un bloqueo u otras razones, no se ejecutarán todas las declaraciones. Es decir, todas las declaraciones en la transacción se ejecutan con éxito o fallan.

¿Conoces la sintaxis de control de transacciones?

BEGIN 或 START TRANSACTION 显式地开启一个事务;
COMMIT / COMMIT WORK二者是等价的。提交事务,并使已对数据库进行的所有修改成为永久性的;
ROLLBACK / ROLLBACK WORK。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
SAVEPOINT identifier 在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;
RELEASE SAVEPOINT identifier 删除一个事务的保存点;
ROLLBACK TO identifier 把事务回滚到标记点;
SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE

Usa un lenguaje común para hablar sobre las cosas que entiendes

Para usar el negocio bancario como una castaña, el usuario lemon tiene dos tarjetas bancarias, una es la tarjeta de salario CMBC del China Merchants Bank y la otra es la tarjeta de ahorro ICBC. El salario se paga el 5 de cada mes. A la cuenta de la tarjeta de ahorro CCB. Recuerde que la abreviatura bancaria aquí es seguida por el nombre de la tabla de datos correspondiente. Si no puede recordarlo, déjeme ocuparlo por usted.

招商银行(CMBC):“存么?白痴!”
中国工商银行(ICBC): “爱存不存!”
中国建设银行(CCB): “存?存不?”
中国银行(BC): “不存!”
中国农业银行(ABC): “啊,不存!”
民生银行(CMSB):“存么?SB!"
兴业银行(CIB):“存一百。”
国家开发银行(CDB):“存点吧!”
汇丰银行(HSBC):“还是不存!”

imagen

Esta operación de transferencia se puede simplificar en una transacción, incluidos los siguientes pasos:

  1. Compruebe si el saldo de la cuenta CMBC es superior a 1 millón
  2. Restar 1 millón del saldo de la cuenta CMBC
  3. Agregue 1 millón al saldo de la cuenta ICBC

La siguiente declaración corresponde a la creación de una transacción de transferencia:

START TRANSACTION;
SELECT balance FROM CMBC WHERE username='lemon';
UPDATE CMBC SET balance = balance - 1000000.00 WHERE username = 'lemon';
UPDATE ICBC SET balance = balance + 1000000.00 WHERE username = 'lemon';
COMMIT;

¿Cuáles son las características ACID de las transacciones?

ACID es en realidad un acrónimo en inglés de características de transacción, el significado específico es este:

  • Atomicidad (atomicidad)
    Una transacción debe considerarse como una unidad mínima de trabajo indivisible. Todas las operaciones en toda la transacción deben presentarse con éxito o fallar y revertirse. Para una transacción, es imposible realizar solo algunas de las operaciones .

  • La base de datos de consistencia (consistencia) siempre se convierte de un estado consistente a otro estado consistente. En el ejemplo anterior, la coherencia asegura que, incluso si el sistema se bloquea entre el tercer y el cuarto estado de cuenta, la cuenta CMBC no perderá 1 millón, de lo contrario, limón llorará porque la transacción no se ha confirmado finalmente, por lo que todas las transacciones Los cambios no se guardarán en la base de datos.
  • Aislamiento (aislamiento)
    En términos generales, los cambios realizados por una transacción no son visibles para otras transacciones hasta la confirmación final. En el ejemplo anterior, cuando se ejecuta el tercer estado de cuenta y el cuarto estado aún no ha comenzado, si alguien más también se está preparando para depositar dinero en la cuenta CMBC de limón, entonces todavía ve 100 en la cuenta CMBC Millones
  • Durabilidad (durabilidad)
    Una vez que se confirma la transacción, los cambios realizados se guardarán permanentemente en la base de datos. En este momento, incluso si el sistema falla, los datos modificados no se perderán. La durabilidad es un concepto algo vago, porque en realidad hay muchos niveles diferentes de durabilidad. Algunas estrategias de persistencia pueden proporcionar una seguridad muy fuerte, mientras que otras no lo son necesariamente. Y "no puede haber una estrategia que pueda garantizar una durabilidad del 100%", de lo contrario, ¿qué más necesita hacer una copia de seguridad?

ÁCIDO

¿Qué es lectura sucia, lectura no repetible, lectura fantasma?

Lectura sucia

Antes de enviar los datos después de que la transacción A modifique los datos, otra transacción B lee los datos en este momento. Si no hay control, la transacción B lee A para modificar los datos, y luego A modifica los datos antes de enviarlos, luego B lee Los datos recibidos son datos sucios. Este proceso se denomina lectura sucia.

Lectura sucia

No repetible

En un momento determinado después de leer ciertos datos en una transacción, los datos leídos anteriormente se volvieron a leer, pero se descubrió que los datos leídos habían cambiado o algunos registros habían sido eliminados.

imagen

Lectura fantasma

Cuando la transacción A lee un rango de registros de acuerdo con la condición de consulta, la transacción B inserta un nuevo registro que satisface la condición en el rango. Cuando la transacción A vuelve a consultar el registro de acuerdo con la condición, se generará un nuevo registro que cumpla con la condición ( Fila fantasma)
Lectura fantasma

¿Cuál es la diferencia entre lectura no repetible y lectura mágica?

  • El punto de lectura no repetible es la modificación: en la misma transacción, en las mismas condiciones, los datos leídos por primera vez son diferentes de los datos leídos por segunda vez. (Porque hay otras transacciones enviadas para modificación en el medio)
  • El punto de lectura fantasma es agregar o eliminar: en la misma transacción, en las mismas condiciones, el "número de registros" leídos por primera y segunda vez es diferente. (Porque hay otras transacciones en el medio que se han insertado / eliminado)

¿Conoces los cuatro niveles de aislamiento de SQL? ¿Cuál es el problema específico resuelto?

SQL implementa cuatro niveles de aislamiento estándar, cada uno de los cuales especifica las modificaciones realizadas en una transacción, que son visibles dentro y entre transacciones, y que no lo son. Los niveles de aislamiento de bajo nivel generalmente admiten un procesamiento concurrente más alto y tienen una sobrecarga del sistema más baja.
Nivel de aislamiento

Varios niveles de aislamiento pueden resolver lecturas sucias, lecturas no repetibles y lecturas fantasmas en diversos grados. Los niveles de aislamiento tienen sus propios puntos fuertes y no existe una solución perfecta. Es un pícaro hablar sobre implementaciones específicas fuera de los escenarios empresariales.

Comparación de niveles de aislamiento.

¿Qué motores de almacenamiento en MySQL admiten transacciones?

Los motores de almacenamiento InnoDB y NDB Cluster en MySQL proporcionan capacidades de procesamiento de transacciones, así como otros terceros motores que admiten transacciones.

¿Qué es el envío automático?

MySQL por defecto es el AUTOCOMMITmodo de envío automático . En otras palabras, si una transacción no se inicia explícitamente, cada consulta se trata como una transacción para realizar una operación de confirmación.

Para tablas transaccionales como MyISAM o tablas de memoria, la modificación AUTOCOMMITno tendrá efecto. Para este tipo de tabla, no existe el concepto de COMMITo ROLLBACK, se puede decir que es equivalente a estar siempre en el AUTOCOMMITmodo habilitado.

¿Se pueden mezclar los motores de almacenamiento en las transacciones?

Intente no utilizar múltiples motores de almacenamiento en la misma transacción. La capa del servidor MySQL no administra las transacciones. La transacción es implementada por el motor de almacenamiento subyacente.

Si combina tablas transaccionales y no transaccionales (como las tablas InnoDB y MyISAM) en una transacción, no habrá ningún problema bajo el compromiso normal.

Sin embargo, si la transacción necesita revertirse, los cambios en la tabla no transaccional no se pueden deshacer, lo que hará que la base de datos esté en un estado inconsistente. Esta situación es difícil de reparar y el resultado final de la transacción no se puede determinar. Por lo tanto, es muy importante elegir el motor de almacenamiento adecuado para cada tabla.

¿Cuáles son los tipos de motores de almacenamiento MySQL?

Los motores de almacenamiento más utilizados son el motor InnoDB y el motor de almacenamiento MyISAM, InnoDB es el motor de transacciones predeterminado de MySQL.

Ver los motores compatibles actualmente para las tablas de la base de datos:

show table status from 'your_db_name' where name='your_table_name'; 
查询结果表中的`Engine`字段指示存储引擎类型。

¿Características y escenarios de aplicación del motor de almacenamiento InnoDB?

InnoDB es el "motor de transacciones" predeterminado de MySQL, que está configurado para manejar una gran cantidad de transacciones de corta duración (de corta duración). La mayoría de las transacciones a corto plazo normalmente se envían y rara vez se revierten.

Para obtener más información sobre el modelo de transacción de InnoDB, consulte el manual oficial de MySQL y publique un enlace aquí: https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-model.html

Historia

InnoDB en la versión moderna de MySQL se llama históricamente complemento InnoDB. Este complemento MySQL se desarrolló en 2008. No fue sino hasta 2010 cuando Oracle adquirió Sun que el lanzamiento de MySQL5.5 reemplazó oficialmente la versión anterior de InnoDB con el complemento InnoDB. Hasta ahora, el "neumático de repuesto" se ha convertido con éxito en un motor real para MySQL en lugar de un complemento. Usted ve que un complemento funciona muy duro.

imagen

Caracteristicas

El control de concurrencia de múltiples versiones (MVCC) se utiliza para admitir una alta concurrencia. Y logre cuatro niveles de aislamiento estándar, a través de la next-key lockingestrategia de bloqueo de brecha para evitar la aparición de lecturas fantasma.

La tabla del motor se basa en un índice agrupado, que tiene un alto rendimiento para consultas de clave principal. Sin embargo, su índice secundario secondary indexdebe incluir la columna de clave primaria en el índice de clave no primaria, por lo que si la columna de clave primaria es grande, todos los demás índices serán grandes. Por lo tanto, si hay muchos índices en la tabla, la clave primaria debe ser lo más pequeña posible. Además, el formato de almacenamiento de InnoDB es independiente de la plataforma.

InnoDB ha realizado muchas optimizaciones, como: lectura anticipada predecible en la forma de leer datos del disco, índice de hash adaptativo (índice de hash adaptativo) que crea automáticamente índices de hash en la memoria para acelerar las operaciones de lectura, y aquellos que pueden acelerar las operaciones de inserción Insertar buffer (insertar buffer), etc.

InnoDB admite copias de seguridad reales a través de algunos mecanismos y herramientas. Otros motores de almacenamiento de MySQL no admiten copias de seguridad activas. Para obtener una vista coherente, debe dejar de escribir en todas las tablas. En un escenario mixto de lectura y escritura, detener la escritura también puede significar Deja de leer

¿Cuáles son las características y escenarios de aplicación del motor de almacenamiento MyISAM?

MyISAM es el motor de almacenamiento predeterminado para MySQL 5.1 y versiones anteriores. MyISAM proporciona muchas características, que incluyen indexación de texto completo, compresión, funciones espaciales (SIG), etc., pero MyISAM no "admite transacciones y bloqueos de nivel de fila", para datos de solo lectura, o la tabla es relativamente pequeña, puede tolerar operaciones de reparación, aún puede usarse Es

Caracteristicas

MyISAM "no admite el bloqueo de nivel de fila pero bloquea toda la tabla". Se agrega un bloqueo compartido a todas las tablas que deben leerse al leer, y se agrega un bloqueo exclusivo a la tabla al escribir. Pero mientras la tabla tiene operaciones de lectura, también puede insertar nuevos registros en la tabla, lo que se denomina inserción concurrente.

La tabla MyISAM puede realizar operaciones de inspección y reparación de forma manual o automática. Sin embargo, a diferencia de la recuperación de transacciones y la recuperación de fallos, puede causar alguna "pérdida de datos" y la operación de reparación es muy lenta.

Para tablas MyISAM, incluso BLOBy TEXTcampos de igual longitud, sino que también se puede basar en los primeros 500 caracteres para crear el índice, MyISAM también es compatible con "la indización de texto", que se basa en una palabra de índice creado para apoyar las consultas complejas.

Si se especifica una DELAY_KEY_WRITEopción, los datos de índice modificados no se escribirán en el disco inmediatamente después de que se complete la ejecución de cada modificación, sino que se escribirán en el búfer de claves en la memoria, solo cuando se borre el búfer de claves o se cierre la tabla Escriba el bloque de índice correspondiente en el disco. Este método puede mejorar en gran medida el rendimiento de escritura, pero cuando la base de datos o el host se bloquean, causará "daños en el índice" y deberá realizar operaciones de reparación.

InnoDB vs. MyISAM

Dicho esto, no lo recuerdo a simple vista. Le daré una tabla que enumera brevemente las principales diferencias entre los dos motores, como se muestra a continuación.
Comparación de motor

Otros motores de almacenamiento

MySQL también es compatible con algunos otros motores de almacenamiento, como el motor de memoria, el motor de clúster NDB y el motor CSV. Dado que estos motores no son comúnmente utilizados por los mencionados InnoDB y MyISAM, no se presentan aquí. Si está interesado, puede ir a la documentación de MySQL para comprenderlo. Aquí también hay un enlace oficial: https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html
Lista de motores

Di algunas palabras mas

Este artículo es lo básico de MySQL. Intento ordenar este conocimiento de una forma fácil de entender y combinarlo con gráficos. Cuanto más básico y subyacente sea el conocimiento, más fácil será investigar y dominar el título. El punto de investigación, creo que después de leer el motor de transacciones y almacenamiento de MySQL debería tener una comprensión relativamente completa.

Finalmente, gracias por leer. El propósito del artículo es compartir la comprensión del conocimiento. Si hay deficiencias obvias en el texto, puede señalar que aprenderemos juntos en la discusión.

La originalidad no es fácil. Al ver aquí mover los dedos, los "tres enlaces" de todos son el mayor apoyo para mi creación continua.

Puede buscar en la cuenta pública de WeChat "escuela de tecnología back-end" y responder "datos" con varios materiales de aprendizaje de programación que preparé para usted. El artículo se actualiza continuamente cada semana, ¡hasta la próxima!

Referencias

https://book.douban.com/subject/23008813/

https://juejin.im/post/5c519bb8f265da617831cfff#comment

https://tech.meituan.com/2014/08/20/innodb-lock.html

https://blog.csdn.net/shellching/article/details/8106156

https://coolshell.cn/articles/6790.html

https://zhuanlan.zhihu.com/p/29166694

https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html

https://www.zhihu.com/question/27876575

https://www.runoob.com/mysql/mysql-transaction.html

https://blog.csdn.net/qq_35642036/article/details/82820178?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://github.com/CyC2018/CS-Notes/blob/master/notes/MySQL.md#b-tree-principle

Supongo que te gusta

Origin www.cnblogs.com/NanoDragon/p/12650049.html
Recomendado
Clasificación