30 preguntas de la entrevista de base de datos MySQL súper clásicas, ¿estás seguro de que no vendrás a echar un vistazo?

Las bases de datos se dividen en bases de datos relacionales y bases de datos no relacionales , que son lo que a menudo llamamos SQL y NoSQL. Los productos representativos de las bases de datos en estas dos direcciones son MySQL y Redis. Esta vez usamos principalmente la forma de preguntas y respuestas de entrevistas para conocer la relación Conocimientos básicos de la base de datos MySQL.

Empieza la entrevista, ¡prepárate para aceptar la tortura del alma del entrevistador!

 

Base de datos relacional

¿Qué es una base de datos relacional?

Una base de datos relacional se refiere a una base de datos que utiliza un modelo relacional para organizar los datos. Almacena datos en forma de filas y columnas para que los usuarios los entiendan fácilmente. Las series de filas y columnas en una base de datos relacional se denominan tablas, que consisten en un grupo de tablas. La base de datos. El usuario recupera los datos en la base de datos mediante una consulta, y la consulta es un código de ejecución que se usa para limitar ciertas áreas en la base de datos.

En pocas palabras, el modelo relacional es un modelo de tabla bidimensional.

¿Cuáles son las ventajas de las bases de datos relacionales?

Ventajas de las bases de datos relacionales:

  • Fácil de comprender

    La estructura de la tabla bidimensional relacional está muy cerca del mundo real y la tabla bidimensional es fácil de entender.

  • Soporte para consultas complejas.Las sentencias SQL se pueden utilizar para realizar fácilmente consultas de datos muy complejas entre una tabla y varias tablas.

  • Respalde el procesamiento confiable de transacciones y mantenga la integridad de la transacción, de modo que se puedan cumplir los requisitos de acceso a los datos con un alto rendimiento de seguridad.

Base de datos MySQL

Que es SQL

El lenguaje de consulta estructurado (lenguaje de consulta estructurado), abreviado como SQL, es un lenguaje de programación de propósito especial, un lenguaje de programación de consulta de base de datos y lenguaje de programación, utilizado para acceder a datos y consultar, actualizar y administrar sistemas de bases de datos relacionales.

¿Qué es MySQL?

MySQL es un sistema de administración de bases de datos relacionales. MySQL es uno de los sistemas de administración de bases de datos relacionales más populares. Las bases de datos relacionales comunes incluyen Oracle, SQL Server, Access, etc.

MySQL se ha convertido en la base de datos de código abierto más popular en el pasado debido a su alto rendimiento, bajo costo y buena confiabilidad, y se ha utilizado ampliamente en sitios web pequeños y medianos en Internet .

 

¿MySQL y MariaDB son estúpidamente confusos?

MySQL fue desarrollado originalmente por la empresa sueca MySQL AB. El fundador de MySQL es Ulf Mikhail Videnius, comúnmente apodado Monty.

Después de ser adquirido por Oracle, ahora es un producto de Oracle. Oracle aumentó sustancialmente el precio de la edición comercial de MySQL, lo que provocó que la comunidad de software libre se preocupara sobre si Oracle continuará admitiendo la edición de la comunidad MySQL.

El fundador de MySQL es el ex jefe llamado Monty que estableció un plan de rama MariaDB basado en MySQL.

MariaDB tiene la intención de mantener un alto grado de compatibilidad con MySQL, para garantizar que tenga la función de reemplazo directo de la paridad binaria de la biblioteca y la coincidencia exacta con la API de MySQL (interfaz del programa de aplicación) y los comandos. El software de código abierto original que usaba MySQL se convirtió gradualmente en MariaDB u otras bases de datos.

Así que si ves que tu empresa usa MariaDB, no lo dudes. De hecho, sigue siendo MySQL. Si aprendes MySQL, obtendrás MariaDB.

Un huevo de pascua

MariaDB lleva el nombre de la hija menor de Monty, María, al igual que MySQL lleva el nombre de su otra hija. Mí, dos bases de datos famosas llevan el nombre de dos hijas, tu tío sigue siendo tu tío, ¡el anciano es increíble! 

¿Cómo verificar el número de versión actual de MySQL?

Bajo la línea de comando del sistema:mysql -V

Conéctese a la línea de comando de MySQL e ingrese:

> status;

Server:   MySQL
Server version:  5.5.45
Protocol version: 10

select version();

+------------------------+
| version()              |
+------------------------+
| 5.5.45-xxxxx |
+------------------------+

Tipo de datos básico

¿Qué tipos de datos tiene MySQL?

Los tipos de datos de MySQL son muy ricos. Los tipos comunes se presentan brevemente de la siguiente manera:

Tipo de entero:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT

Tipo de punto flotante:FLOAT、DOUBLE、DECIMAL

Tipo de cuerda:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB

Tipo de fecha:Date、DateTime、TimeStamp、Time、Year

Otros tipos de datos: BINARY、VARBINARY、ENUM、SET...

¿Cuál es la diferencia entre CHAR y VARCHAR?

CHAR es un tipo de carácter de longitud fija y VARCHAR es un tipo de carácter de longitud variable La siguiente discusión se basa en MySQL 5.0 y superior.

Terreno común

Tanto CHAR (M) como VARCHAR (M) indican que la columna puede almacenar M caracteres , ¡ tenga en cuenta que no es un byte! !

Características del tipo CHAR

  • CHAR puede almacenar hasta 255 caracteres (tenga en cuenta que no es un byte) , y los caracteres tienen diferentes conjuntos de codificación, como codificación UTF8 (3 bytes), codificación GBK (2 bytes), etc.

  • Porque  CHAR(M) si la longitud de los datos reales almacenados es menor que M, entonces MySQL creará automáticamente un carácter de espacio a su derecha, pero los que no estén dentro del carácter de espacio de relleno se eliminarán en la operación de recuperación.

Características del tipo VARCHAR

  • La longitud máxima de VARCHAR es 65535 bytes .

  • VARCHAR almacena la cadena real más 1 o 2 bytes para registrar la longitud real de la cadena. Si la longitud de la cadena es menor a 255 bytes, se usa 1 byte para registrar, y si excede 255, se requieren 2 bytes para grabar. [^ 12]

¿Cuántos caracteres chinos se pueden almacenar en VARCHAR (50)?

El número de caracteres chinos almacenados está relacionado con la versión.

Para versiones inferiores a mysql 4.0, varchar (50) se refiere a 50  bytes . Cuando se almacenan caracteres chinos codificados en formato UTF8 (3 bytes por carácter chino), solo se pueden almacenar 16 caracteres.

En mysql 5.0 y superior, varchar (50) se refiere a 50  caracteres , no importa si está almacenado en números, letras o caracteres chinos codificados en UTF8, se pueden almacenar 50 caracteres.

¿Pueden int (10) y bigint (10) tener el mismo tamaño de datos?

Las razones específicas son las siguientes:

  • int puede almacenar enteros con signo de cuatro bytes.

  • bigint puede almacenar enteros con signo de ocho bytes.

Por lo tanto, el tamaño de los datos que se pueden almacenar es diferente y los números en él  10  representan solo el ancho de visualización de los datos. [^ 13]

  • El ancho de la pantalla indica el número máximo posible de números mostrados por Mysql. Cuando el número de dígitos es menor que el ancho especificado, el lado izquierdo del número se llenará con espacios , lo cual no es fácil de ver.

  • Si se inserta un valor mayor que el ancho de la pantalla, siempre que el valor no exceda el rango de valores del tipo, el valor aún se puede insertar y mostrar.

  • Cuando especifique la zerofill opción al construir la tabla  , se 0 rellenará la parte que sea menor que el ancho de visualización,  si es 1, se visualizará  0000000001.

  • Si no se especifica el ancho de visualización, el ancho predeterminado de bigint es 20 y el ancho predeterminado de int es 11.

Relacionado con el motor de almacenamiento

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

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

Para ver los motores actualmente admitidos de la tabla de la base de datos, puede usar la siguiente declaración de consulta para ver:

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

¿Cuál es el escenario de aplicación del motor de almacenamiento InnoDB?

InnoDB es el "motor de transacciones" predeterminado de MySQL y está configurado para manejar una gran cantidad de transacciones de corta duración. La mayoría de las transacciones de corta duración se realizan normalmente y rara vez se revierten.

¿Cuáles son las características del motor de almacenamiento InnoDB?

El control de concurrencia de múltiples versiones (MVCC) se utiliza para admitir una alta concurrencia. También implementa cuatro niveles de aislamiento estándar y next-key lockingevita la aparición de lectura fantasma a través de la estrategia de bloqueo de espacios .

La tabla del motor se crea en base a un índice agrupado, que tiene un alto rendimiento para consultas de clave primaria. Sin embargo, su índice secundario de secondary indexclave no principal debe contener la columna de clave principal, por lo que si la columna de clave principal es grande, todos los demás índices serán grandes. Por lo tanto, si hay más índices en la tabla, la clave principal 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 para los datos leídos en disco, creación automática de índices hash en la memoria para acelerar las operaciones de lectura e índices hash adaptativos que pueden acelerar las operaciones de inserción. Insertar búfer (insertar búfer), etc.

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

¿Cuáles son las cuatro características principales del motor InnoDB?

Insertar búfer

Insertar búfer se utiliza para insertar y actualizar operaciones de índice no agrupado. Primero determine si el índice no agrupado insertado está en el grupo de búfer, si lo está, insértelo directamente; de ​​lo contrario, insértelo en el objeto Insertar búfer. Luego, realice la operación de combinación de Insertar búfer y los nodos hoja de índice auxiliares a una cierta frecuencia para combinar múltiples inserciones en una operación para mejorar el rendimiento de inserción del índice no agrupado.

Escritura doble

La escritura doble consta de dos partes, una es el búfer de escritura doble en la memoria, el tamaño es de 2 MB y la otra son las 128 páginas continuas del espacio de tabla compartido en el disco físico y el tamaño también es de 2 MB. Al actualizar las páginas sucias del grupo de búfer, las páginas sucias no se escriben directamente en el disco, pero las páginas sucias se copian primero en el área de la memoria a través de la función memcpy y luego se dividen en dos veces a través del búfer de escritura doble, cada vez que se escribe 1 MB secuencialmente En el disco físico del espacio de tabla compartido, llame inmediatamente a la función fsync para sincronizar el disco y evitar problemas causados ​​por la escritura del búfer del sistema operativo.

Adaptive Hash Index (Adaptive Hash Index)

InnoDB creará un índice hash para las páginas activas de acuerdo con la frecuencia y el modo de acceso para mejorar la eficiencia de las consultas. El índice es construido por la página del árbol B + del grupo de búfer, por lo que la velocidad de establecimiento es muy rápida. El motor de almacenamiento InnoDB monitoreará la consulta de cada página de índice en la tabla. Si se observa que el establecimiento de un índice hash puede traer una mejora de velocidad, entonces el establecimiento de Ha Índice griego, por lo que se llama índice hash adaptativo.

Grupo de búfer

Para mejorar el rendimiento de la base de datos, se introduce el concepto de reserva de búfer. El parámetro innodb_buffer_pool_size puede establecer el tamaño de la piscina de búfer y el parámetro innodb_buffer_pool_instances puede establecer el número de instancias de la reserva de búfer. La agrupación de almacenamientos intermedios se utiliza principalmente para almacenar lo siguiente:

Los tipos de páginas de datos almacenadas en caché en el grupo de búfer son: página de índice, página de datos, página de deshacer, insertar búfer, índice hash adaptativo, información de bloqueo almacenada en InnoDB e información del diccionario de datos (Diccionario de datos).

¿Cuáles son los 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 una gran cantidad de funciones, incluida la indexación de texto completo, la compresión, las funciones espaciales (GIS), etc., pero MyISAM no "admite bloqueos de transacciones y de nivel de fila". Para datos de solo lectura o tablas que son pequeñas y pueden tolerar operaciones de reparación, aún se pueden usar eso.

¿Cuáles son las características del motor de almacenamiento MyISAM?

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

Las tablas MyISAM se pueden comprobar y reparar de forma manual o automática. Pero a diferencia de la recuperación de transacciones y la recuperación de fallos, puede causar cierta "pérdida de datos" y la operación de reparación es muy lenta.

Para las tablas MyISAM, incluso los campos BLOBcon la TEXTmisma longitud se pueden indexar en función de los primeros 500 caracteres. MyISAM también admite "indexación de texto completo", que es un índice creado en base a la segmentación de palabras que puede admitir consultas complejas.

Si se especifica la DELAY_KEY_WRITEopción, cada vez que se ejecuta la modificación, los datos del índice modificado no se escribirán en el disco inmediatamente, 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 enormemente el rendimiento de escritura, pero cuando la base de datos o el host fallan, causará "daños en el índice" y será necesario realizar operaciones de reparación.

5 diferencias principales entre los motores de almacenamiento MyISAM e InnoDB

  • InnoDB admite cosas, pero MyISAM no admite cosas

  • InnoDB admite bloqueos a nivel de fila, mientras que MyISAM admite bloqueos a nivel de tabla

  • InnoDB es compatible con MVCC, pero MyISAM no

  • InnoDB admite claves externas, pero MyISAM no

  • InnoDB no admite la indexación de texto completo, mientras que MyISAM admite

Una tabla simplemente enumera las principales diferencias entre los dos motores, como se muestra a continuación:

¿Qué motor SELECT COUNT (*) funciona más rápido?

SELECT COUNT(*)   A menudo se utiliza para contar el número total de filas en una tabla. Es más rápido en el motor de almacenamiento MyISAM, siempre que no se puedan agregar condiciones WHERE .

Esto se debe a que MyISAM optimiza el número de filas en la tabla. Utiliza una variable para almacenar el número de filas en la tabla. Si la condición de consulta no tiene una condición WHERE, significa cuántos datos hay en la tabla de consulta. MyISAM puede devolver rápidamente el resultado. Si se agrega WHERE Las condiciones no funcionarán.

Las tablas InnoDB también tienen una variable que almacena el número de filas de la tabla, pero este valor es un valor estimado, por lo que no tiene mucho significado práctico.

Conceptos básicos de MySQL

¿Cuáles son los tres paradigmas del diseño de bases de datos?

1 Paradigma: 1NF es la restricción atómica de los atributos, que requiere que los atributos sean atómicos y no descomponibles; (siempre que sea una base de datos relacional, 1NF se satisface)

2 Paradigma: 2NF es una restricción única en los registros, que requiere que los registros se identifiquen de forma única, es decir, la unicidad de las entidades;

3 Paradigma: 3NF es una restricción sobre la redundancia de campos, es decir, ningún campo no puede derivarse de otros campos y no requiere redundancia en el campo. No se puede realizar un diseño de base de datos redundante

Sin embargo, una base de datos sin redundancia puede no ser la mejor base de datos. A veces, para mejorar la eficiencia operativa, es necesario bajar el estándar del paradigma y retener adecuadamente los datos redundantes. El método específico es: cumplir con el tercer paradigma y bajar el estándar del paradigma al diseñar el modelo conceptual de datos El trabajo se tiene en cuenta al diseñar el modelo de datos físicos, y reducir el paradigma es aumentar los campos y permitir la redundancia.

¿Cuáles son las clasificaciones de las sentencias SQL?

  1. DDL: Lenguaje de definición de datos (crear alter drop)

  2. DML: declaración de manipulación de datos (insertar actualización eliminar)

  3. DTL: declaración de transacción de datos (cometer collback savapoint)

  4. DCL: declaración de control de datos (revocación de concesión)

¿Cuál es la diferencia entre eliminar, soltar y truncar en la operación de eliminación de la base de datos?

  • Cuando la tabla ya no sea necesaria, puede utilizar la opción de eliminar la tabla;

  • Cuando aún desee conservar la tabla, pero desee eliminar todos los registros, utilice truncar para eliminar los registros de la tabla.

  • Cuando desee eliminar algunos registros (generalmente hay una restricción de cláusula WHERE), use delete para eliminar algunos registros de la tabla.

¿Qué es una vista MySql?

La vista es una tabla virtual y no almacena datos, solo los datos dinámicos de la declaración en el momento de la definición.

Crear sintaxis de vista:

CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = user]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

Descripción de parámetros:

  • O REEMPLAZAR: Si la vista existe, reemplace la vista existente.

  • ALGORITMO: algoritmo de selección de vista, el algoritmo predeterminado es UNDEFINED (indefinido) y MySQL selecciona automáticamente el algoritmo que se utilizará.

  • DEFINER: especifique el creador o definidor de la vista. Si no se especifica esta opción, el usuario que creó la vista es el definidor.

  • SEGURIDAD SQL: seguridad SQL, el valor predeterminado es DEFINER.

  • select_statement: instrucción SELECT para crear una vista, puede seleccionar datos de una tabla base u otras vistas.

  • CON OPCIÓN DE VERIFICACIÓN: Indica que se garantiza que la vista estará restringida cuando se actualice. El valor predeterminado es CASCADED.

¿Cuáles son las ventajas de usar vistas MySQL?

  1. La operación es simple y conveniente. Los usuarios de la vista no necesitan preocuparse por la estructura, las condiciones de asociación y las condiciones de filtrado de la tabla correspondiente a la vista en absoluto. Para los usuarios, ya es un conjunto de resultados de condiciones compuestas filtradas.

  2. Los datos están más seguros. Los usuarios de la vista solo pueden acceder al conjunto de resultados en la vista, y la vista puede restringir el acceso a la tabla a ciertas filas y columnas.

  3. Aislamiento de datos. El impacto de los cambios en la estructura de la tabla de origen en los usuarios está protegido y la estructura de la vista permanece sin cambios cuando cambia la estructura de la tabla de origen. ^ 1

¿Cuál es el número de puerto predeterminado del servicio MySql?

El puerto predeterminado es 3306

Ver comandos de puerto:> show variables like 'port';

¿Cómo filtrar varias columnas con DISTINCT?

DISTINCT se utiliza para deduplicar los datos seleccionados y el uso de una sola columna es fácil de entender. Por ejemplo, la siguiente tabla de datos  tamb:

   name        number
   Tencent      1
   Alibaba      2
   Bytedance    3
   Meituan      3

Declaración de consulta: los SELECT DISTINCT name FROM table tamb resultados son los siguientes:

   name       
   Tencent   
   Alibaba    
   Bytedance 
   Meituan  

Si desea number mostrar la deduplicación por  columna al mismo tiempo  name , puede escribir una declaración de consulta:

SELECT DISTINCT number, name FROM table tamb

La regla de desduplicación de DISTINCT multiparámetro es: tratar todos los parámetros después de DISTINCT como una condición de filtro, lo que significa que se (number, name)procesará la desduplicación general y el  duplicado solo se desduplicará cuando la combinación sea diferente . Los resultados son los siguientes:

       number   name
         1  Tencent
         2  Alibaba
         3  Bytedance
         3  Meituan

De los resultados, parece que no se ha logrado el efecto de desduplicación, entonces, ¿cómo podemos lograr "desduplicación en  number columnas y visualización simultánea  name"? Puede utilizar la  Group By declaración:

SELECT number, name FROM table tamb GROUP BY number El resultado es el siguiente, que es exactamente lo que queremos:

       number   name
         1  Tencent
         2  Alibaba
         3  Bytedance

¿Qué es un procedimiento almacenado?

Una colección de una o más sentencias SQL tiene las siguientes características:

  • El procedimiento almacenado puede lograr una velocidad de ejecución más rápida.

  • Los procedimientos almacenados se pueden escribir con declaraciones de control de flujo, que tienen una gran flexibilidad y pueden completar juicios complejos y cálculos más complejos.

  • Los procedimientos almacenados se pueden utilizar por completo como mecanismo de seguridad.

  • Los procedimientos almacenados pueden reducir el tráfico de la red

delimiter 分隔符
create procedure|proc proc_name()
begin
    sql语句
end 分隔符
delimiter ;    --还原分隔符,为了不影响后面的语句的使用
--默认的分隔符是;但是为了能在整个存储过程中重用,因此一般需要自定义分隔符(除\外)

show procedure status like ""; --查询存储过程,可以不适用like进行过滤
drop procedure if exists;--删除存储过程

Los procedimientos y funciones almacenados parecen ser similares, ¿cuál es la diferencia entre ellos?

Los procedimientos y funciones almacenados son una colección de declaraciones SQL que se han compilado y almacenado en la base de datos con anterioridad. Llamar a procedimientos y funciones almacenados puede simplificar mucho el trabajo para los desarrolladores de aplicaciones, reducir la transmisión de datos entre la base de datos y el servidor de aplicaciones y mejorar el procesamiento de datos. La eficiencia es buena.

Mismo punto

  • Los procedimientos y funciones almacenados son una colección de sentencias SQL para la ejecución repetible de la base de datos.

  • Los procedimientos y funciones almacenados se almacenan en caché después de compilarse una vez, y la declaración sql compilada se afectará directamente la próxima vez que se use, lo que reduce la interacción de la red y mejora la eficiencia.

diferencia

  • El identificador es diferente, el identificador de la función es función y el procedimiento almacenado es procedimiento.

  • La función devuelve un único valor o un objeto de tabla, mientras que el procedimiento almacenado no devuelve un valor, pero puede devolver varios valores a través de los parámetros OUT.

  • Hay muchas restricciones en las funciones, por ejemplo, no se pueden usar tablas temporales, solo se pueden usar variables de tabla, algunas funciones no están disponibles, etc., mientras que las restricciones en los procedimientos almacenados son relativamente pequeñas.

  • En términos generales, la función realizada por el procedimiento almacenado es un poco más complicada y la realización de la función de la función es más específica

  • Los parámetros de la función solo pueden ser de tipo IN, y los parámetros del procedimiento almacenado pueden ser de IN OUT INOUTtres tipos.

  • Las funciones almacenadas se llaman usando select, y los procedimientos almacenados necesitan llamarse usando call.

En conclusión

Este artículo resume una serie de puntos de conocimiento básicos comunes en las entrevistas en forma de preguntas y respuestas de entrevistas. Todos son contenidos muy básicos, pero cuanto más básicos, más importantes son. Se pueden utilizar como notas de puntos de conocimiento, que a menudo se utilizan para revisar el pasado y aprender lo nuevo.

 

Supongo que te gusta

Origin blog.csdn.net/bjmsb/article/details/108503294
Recomendado
Clasificación