Saltar al contenido principal

Las 34 mejores preguntas y respuestas de entrevistas sobre MySQL para 2025

Domina MySQL con esta guía de preguntas para entrevistas, con ejemplos reales y consejos de expertos que te ayudarán a destacar en tu próxima entrevista sobre bases de datos.
Actualizado 26 dic 2024  · 35 min de lectura

¿Te has dado cuenta alguna vez de que MySQL es obligatorio en casi todas las descripciones de puestos de trabajo relacionados con bases de datos? Hay una buena razón para ello: MySQL prácticamente lo impulsa todo, desde tus plataformas de redes sociales favoritas hasta las aplicaciones que utilizas a diario.

He elaborado esta guía para ayudarte a afrontar las preguntas de las entrevistas sobre MySQL. Cubriré todas las bases, desde lo básico que deben saber los desarrolladores junior hasta lo complejo que requieren los puestos senior. Además, compartiré algunos consejos que te ayudarán a parecer un candidato seguro en tus próximas entrevistas relacionadas con los datos. 

¿Qué es MySQL?

MySQL es un RDBMS (sistema de gestión de bases de datos relacionales) de código abierto basado en SQL que organiza los datos en tablas estructuradas. Fue desarrollado por Oracle Corporation.

Se clasificó como el SGBD más popular en 2024 porque cada vez más empresas están migrando sus datos a MySQL. Por eso, si estás pensando en conseguir un trabajo en bases de datos, es muy importante que conozcas MySQL y las bases de datos relacionales. 

Gráfico que muestra los sistemas de bases de datos más populares en 2024, siendo MySQL el más popular, seguido de PostgreSQL.

En junio de 2024, MySQL es el sistema de gestión de bases de datos (SGBD) de código abierto más popular del mundo, con una puntuación en el ranking de 1061. Fuente: Statista.

Preguntas básicas de la entrevista sobre MySQL

En la fase inicial de la entrevista, el entrevistador puede hacerte preguntas fundamentales para evaluar tu comprensión de los conceptos básicos de bases de datos y MySQL. 

1. ¿Qué es una base de datos y en qué se diferencia de un SGBD? 

Una base de datos es un contenedor de almacenamiento que contiene datos a los que podemos acceder, modificar y analizar. Por ejemplo, las plataformas de medios sociales almacenan datos sobre a quién le han gustado nuestras publicaciones en bases de datos.

Un SGBD (Sistema de Gestión de Bases de Datos) es el software que nos permite interactuar con esos datos y gestionarlos mediante la creación de usuarios y la gestión de su acceso. MySQL es una de las opciones de SGBD más populares. Otros ejemplos incluyen PostgreSQL, MongoDB y Microsoft SQL Server.

2. ¿En qué se diferencia MySQL de otros sistemas de gestión de bases de datos relacionales?

MySQL es un sistema de gestión de bases de datos relacionales (RDBMS) de código abierto que utiliza SQL para gestionar los datos. Es conocido por su facilidad de uso, velocidad y compatibilidad con aplicaciones basadas en web. 

He aquí en qué se diferencia MySQL de otros RDBMS:

  • Sencillez y rendimiento: MySQL suele ser elogiado por su sencillez y su rendimiento optimizado, lo que lo convierte en la opción preferida de los desarrolladores web y las nuevas empresas.
  • Funciones avanzadas: Aunque MySQL destaca por su facilidad de uso, puede carecer de las funciones avanzadas de otros RDBMS como PostgreSQL, como un soporte más completo para transacciones ACID, indexación avanzada y un conjunto más amplio de tipos de datos.
  • Motores de almacenamiento: MySQL te permite elegir distintos motores de almacenamiento (por ejemplo, InnoDB, MyISAM) para las tablas, lo que les da flexibilidad para casos de uso específicos.

MySQL es ideal para escenarios que requieren velocidad y escalabilidad, pero para funciones más complejas o de nivel empresarial, PostgreSQL puede ser una mejor opción.

3. ¿Cuáles son los principales tipos de datos disponibles en MySQL?

MySQL admite una variedad de tipos de datos clasificados como:

  • Numérico: INT, DECIMAL, FLOAT, DOUBLE, etc.
  • Cadena: CHAR, VARCHAR, TEXT, BLOB.
  • Fecha/hora: DATE, DATETIME, TIMESTAMP, TIME.
  • JSON: Para almacenar objetos JSON.

4. ¿Cuál es la diferencia entre los tipos de datos INT y DECIMAL? 

INT almacena números enteros sin decimales. Podemos utilizarlo si no hay necesidad de fracciones. Por el contrario, DECIMAL puede almacenar valores financieros y es adecuado para cálculos precisos con decimales. 

5. ¿En qué se diferencia DATE de DATETIME en MySQL? 

La función DATE de MySQL almacena la fecha en formato año, mes y día: 

YYYY-MM-DD

Sin embargo, la función DATETIME almacena la fecha con la hora, y tiene el siguiente aspecto: 

YYYY-MM-DD HH:MM:SS 

6. ¿Qué es una clave ajena y cómo se utiliza en las bases de datos? 

Una clave externa es un campo de una tabla que enlaza con la clave primaria de otra tabla. 

Por ejemplo, en una tabla customers que almacena información sobre clientes, cada cliente tiene una customer_idúnica -en otra tabla llamada transactions (que almacena registros de compras), utilizamos customer_id como clave foránea. El customer_id de la tabla de transacciones vinculará cada compra a un cliente concreto de latabla customers .

Así es como se ve en SQL:

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);
CREATE TABLE transactions (
    transaction_id INT PRIMARY KEY,
    customer_id INT,
    amount DECIMAL(10,2),
    date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

7. ¿Qué diferencias hay entre INNER JOIN, LEFT JOIN, RIGHT JOIN y FULL JOIN?

Las uniones combinan filas de dos o más tablas basándose en columnas relacionadas. He aquí sus diferencias:

  • INNER JOIN: Devuelve las filas en las que hay una coincidencia en ambas tablas.
  • JOIN IZQUIERDO: Devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha. Si no hay coincidencias, se devuelve NULL para las columnas de la tabla correcta.
  • JOIN DERECHO: Similar a LEFT JOIN, devuelve todas las filas de la tabla derecha y las filas coincidentes de la izquierda.
  • JOIN COMPLETO: Combina los resultados de LEFT JOIN y RIGHT JOIN, incluyendo las filas no coincidentes de ambas tablas.

8. ¿Cuál es la diferencia entre DELETE, TRUNCATE y DROP en MySQL?

Comandos como DELETE, TRUNCATE, y DROP pueden sonar parecidos, pero en realidad tienen comportamientos diferentes:

  • BORRAR: Elimina filas de una tabla en función de una condición. Se puede deshacer si está dentro de una transacción. Ejemplo:
DELETE FROM employees WHERE department_id = 5;
  • TRUNCAR: Elimina todas las filas de una tabla, pero la estructura de la tabla permanece intacta. Es más rápido que DELETE y no puede anularse. Ejemplo:
TRUNCATE TABLE employees;
  • BAJA: Elimina completamente la estructura y los datos de la tabla, junto con cualquier dependencia como los índices. Ejemplo:
DROP TABLE employees;

9. ¿Cómo se crea y modifica una tabla en MySQL? Pon ejemplos.

Para crear tablas, puedes utilizar la sentencia CREATE TABLE, y para modificarlas, normalmente la ALTER TABLE. He aquí algunos ejemplos:

  • Crear tabla:
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50));
  • Modifica para añadir una columna:
ALTER TABLE employees ADD COLUMN salary DECIMAL(10, 2);

10. ¿Qué es una tabla temporal en SQL? 

Una tabla temporal sólo existe durante la sesión actual de la base de datos. Una vez que cerramos la sesión, la tabla se borra. Este tipo de tabla puede almacenar temporalmente resultados intermedios. Podemos utilizarla para probar, filtrar o preparar datos antes de insertarlos en una tabla permanente.

He aquí un ejemplo:

CREATE TEMPORARY TABLE temp_employees (
    id INT,
    name VARCHAR(50)
);
INSERT INTO temp_employees VALUES (1, 'John Doe');
SELECT * FROM temp_employees;

11. ¿Qué es una subconsulta en MySQL? Explícalo con un ejemplo. 

Una subconsulta (también llamada consulta anidada) está anidada dentro de otra consulta. Descompone las operaciones complejas de la base de datos en pasos más manejables. Por ejemplo, puedes crear una subconsulta para encontrar empleados que ganen por encima del salario medio: 

SELECT first_name, last_name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

Vamos a desglosarlo:

  1. La consulta interna SELECT AVG(salary) FROM employees calcula primero el salario medio.
  2. A continuación, la consulta externa utiliza esta media para encontrar a los empleados que ganan por encima de ella. 

12. ¿Cómo utilizarías una sentencia INSERT en MySQL para añadir datos a una tabla? Además, ¿tienes algunas buenas prácticas para esto? 

Podemos utilizar la sentencia INSERT() para añadir datos a una tabla. La sintaxis básica es

INSERT INTO table_name (column1, column2, ...) 
VALUES (value1, value2, ...); 

Aquí tienes algunas buenas prácticas que puedes seguir cuando utilice la declaración INSERT():

  1. Enumera explícitamente tus columnas. Esto hace que el código sea más claro y evita errores si la estructura de la tabla cambia más adelante.
  2. Para las columnas AUTO_INCREMENT, como los ID, omítelas en la declaración INSERT(). MySQL los gestiona automáticamente para evitar los ID duplicados. 
  3. Sé coherente con las comillas de cadena. Personalmente prefiero las comillas simples, pero cualquiera de las dos sirve.
  4. Si vas a insertar varias filas, puedes hacerlo en una única sentencia para mejorar el rendimiento.

13. ¿Qué significa el atributo AUTO_INCREMENT en MySQL?

El atributo AUTO_INCREMENT en MySQL genera números únicos y secuenciales para una columna, normalmente la clave primaria de una tabla.

Aquí tienes un ejemplo de cómo crear una tabla con una columna AUTO_INCREMENT:

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    department VARCHAR(50)
);

Y para insertar filas en él:

INSERT INTO employees (name, department) VALUES ('John Doe', 'Sales');
INSERT INTO employees (name, department) VALUES ('Jane Smith', 'Marketing');

14. ¿Qué es una vista en MySQL? 

Una vista es una consulta guardada que funciona como una tabla virtual. Con esto, podemos tomar una consulta compleja, darle un nombre y utilizarla como una tabla para futuras consultas. De este modo, no tendrás que volver a escribir toda la consulta cada vez.

Por ejemplo, para simplificar la consulta de los detalles de los empleados junto con sus nombres de departamento, puedes crear una vista:

CREATE VIEW employee_details AS
SELECT 
    e.id,
    e.name,
    d.department_name,
    e.salary
FROM 
    employees e
JOIN 
    departments d ON e.department_id = d.department_id;

Ahora puedes consultar la vista employee_details como si fuera una tabla:

SELECT * FROM employee_details;

Sin embargo, no podemos utilizar vistas para insertar y actualizar los datos. La mayoría admiten la opción de sólo lectura e impiden que los usuarios accedan a la base de datos, mejorando la seguridad de los datos. A veces, las vistas pueden ralentizar las consultas, ya que ejecutan la consulta subyacente cada vez que se accede a ellas.

Perfeccionamiento de SQL para principiantes

Adquiere los conocimientos de SQL para interactuar con tus datos y consultarlos.
Empieza a Aprender Gratis

Preguntas de la entrevista sobre MySQL intermedio

En esta sección trataremos temas de nivel intermedio. Estas preguntas se formulan principalmente para comprobar tus conocimientos sobre los tipos de datos y la estructura de MySQL.

15. ¿Qué son las tablas con versiones del sistema y cómo funcionan? 

Las tablas versionadas por el sistema mantienen un historial completo de los cambios realizados en una tabla. Como conservan versiones anteriores de cada fila, podemos utilizarlas para auditar y recuperar datos. 

Funcionan añadiendo dos columnas adicionales - StartTime y EndTime - para registrar cuándo es válida cada fila. Cuando insertemos, actualicemos o eliminemos datos, estas marcas de tiempo se actualizarán:

  • Inserta: Se añade una nueva fila con un StartTime fijado en la marca de tiempo actual y un EndTime de 9999-12-31 23:59:59 (o un valor similar que represente "para siempre"). Indica que la fila es válida actualmente.
  • Actualización: La EndTime de la fila original se actualiza con la marca de tiempo actual para marcarla como ya no válida. A continuación, se crea una nueva fila con los datos actualizados, con su StartTime fijado en la marca de tiempo actual y EndTime como "para siempre".
  • Borrar: El EndTime de la fila existente se actualiza con la marca de tiempo actual, indicando que la fila ya no es válida.

Utilizando la cláusula FOR SYSTEM_TIME de SQL, puedes consultar la tabla para ver su estado en un momento determinado o en un intervalo de tiempo. Por ejemplo:

  • FOR SYSTEM_TIME AS OF '2024-01-01': Recupera el estado de la tabla tal y como estaba el 1 de enero de 2024.
  • FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31': Muestra todas las filas válidas dentro de este intervalo de fechas.

16. ¿Qué son las transacciones MySQL y cómo se utilizan?

Las transacciones son un conjunto de operaciones ejecutadas como una sola unidad. Garantizan la integridad de los datos permitiendo que todas las operaciones tengan éxito o fracasen juntas.

Aquí tienes un ejemplo de su uso:

START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE account_id = 2;
COMMIT; -- Saves changes permanently
-- or
ROLLBACK; -- Reverts changes

17. ¿Qué es una restricción por defecto en MySQL? ¿Cómo se establece un valor por defecto para una columna?

Una restricción por defecto en MySQL asigna un valor por defecto a una columna cuando no se proporciona un valor explícito durante una operación INSERT. Esto garantiza que la columna sea válida aunque el usuario la omita durante la introducción de datos.

A continuación te explicamos cómo crear una tabla con un valor por defecto:

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    status VARCHAR(10) DEFAULT 'active'
);

A continuación, puedes insertar una fila sin especificar la dirección status:

INSERT INTO employees (name) VALUES ('John Doe');

Este enfoque reduce la probabilidad de NULL o de datos no válidos en columnas críticas y simplifica las consultas al eliminar la necesidad de manejar explícitamente los casos por defecto.

Resultado:

Campo

Tipo

Nulo

Clave

Por defecto

Extra

id

INT

NO

PRI

NULL

AUTO_INCREMENTO

nombre

VARCHAR(50)

 

NULL

 

estado

VARCHAR(10)

 

activo

 

Este comando es útil porque

  • Ayuda a los desarrolladores a comprender el esquema de la tabla antes de escribir consultas.
  • Puede utilizarse para depurar, sobre todo cuando se trabaja con bases de datos desconocidas.
  • Identifica rápidamente las restricciones, como las claves primarias o los valores por defecto.

19. ¿Cómo utilizarías las funciones de cadena en SQL para gestionar el texto? 

Diferentes funciones de cadena en SQL trabajan con nombres y otros datos de texto. Por ejemplo:

  • La función LENGTH() muestra el número de caracteres de un nombre. 
  • UPPER() y LOWER() convierten el texto a mayúsculas o minúsculas. 
  • CONCAT() une el nombre y el apellido en una columna. 
  • SUBSTRING() extrae partes concretas del texto. Por ejemplo, podemos utilizarlo para separar el mes de la fecha de nacimiento. 

Aquí tienes un ejemplo de consulta:

SELECT 
    UPPER(first_name) AS upper_name,
    CONCAT(first_name, ' ', last_name) AS full_name,
    SUBSTRING(birthdate, 6, 2) AS birth_month,
    TRIM(last_name) AS trimmed_last_name,
    REPLACE(first_name, 'a', '@') AS replaced_name
FROM employees;

Esta consulta:

  • Convierte los nombres a mayúsculas.
  • Combina el nombre y los apellidos en un nombre completo.
  • Extrae el mes de nacimiento de una columna birthdate.
  • Elimina los espacios de los apellidos.
  • Sustituye todas las apariciones de "a" por "@" en los nombres de pila.

20. ¿Cómo actualizarías una fila concreta de una base de datos con SQL?

Puedes utilizar la sentencia UPDATE y la cláusula WHERE para identificar el registro que quieres modificar. 

Por ejemplo, si quieres actualizar el género de la película "Inception" de 2010 a "Ciencia ficción", puedes utilizar la siguiente consulta: 

UPDATE movies
SET genre = 'Sci-Fi'
WHERE movie_title = 'Inception' AND year = 2010;

Aquí, UPDATE movies especifica la tabla que queremos actualizar, y la cláusula WHERE se dirige a la fila en la que el título es "Inception" y el año es "2010". 

Preguntas avanzadas de la entrevista MySQL

Las preguntas avanzadas de la entrevista ponen a prueba tu capacidad para gestionar escenarios complejos de MySQL y dan al entrevistador una idea de tu capacidad para tomar decisiones. 

21. ¿Qué es un disparador en MySQL? ¿Cómo se pone en práctica? 

En MySQL, un disparador es un conjunto de acciones que se ejecutan cuando se produce un evento en la base de datos. Los activadores pueden configurarse para ejecutarse antes o después de eventos como INSERT, UPDATE, o DELETE

Por ejemplo, supongamos que hay una tabla orders en la que se añaden nuevos pedidos. Podemos crear un disparador que registre cada nuevo pedido en una tabla order_history:

CREATE TRIGGER after_order_insert
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
    INSERT INTO order_history (order_id, action, timestamp)
    VALUES (NEW.order_id, 'inserted', NOW());
END;

Una vez ejecutado el activador, la tabla order_history seactualiza automáticamente:

historial_id

order_id

acción

marca de tiempo

1

1

insertado

2024-12-24 10:00:00

2

2

insertado

2024-12-24 11:00:00

22. ¿Por qué añadir un índice hace que las consultas SQL sean más rápidas? 

Si no hay índice, la base de datos tendrá que escanear cada fila para encontrar una entrada concreta. Un índice actúa como una tabla de contenidos, permitiendo a la base de datos acceder a las filas relevantes. Por tanto, añadir un índice reduce el tiempo de búsqueda y agiliza las consultas. 

Los índices suelen implementarse utilizando estructuras de datos como árboles B o tablas hash, que permiten a la base de datos realizar búsquedas, consultas y exploraciones de rangos de forma eficiente.

Aquí tienes un ejemplo de cómo crear un índice:

-- Without an index:
SELECT * FROM employees WHERE last_name = 'Smith';
-- Adding an index on the last_name column:
CREATE INDEX idx_last_name ON employees(last_name);
-- With the index, the database can quickly locate rows with 'Smith' in the last_name column.

Por ejemplo, los índices tienen algunos inconvenientes:

  • Operaciones de escritura más lentas: INSERT, UPDATE, y DELETE operations are slower because the index must be updated each time data changes.
  • Coste de almacenamiento: Los índices requieren espacio de almacenamiento adicional.

23. ¿Qué tipo de datos utilizamos para el peso y el precio del producto en una tabla SQL, y por qué? 

Utilizamos el tipo de datos FLOAT o REAL para almacenar el peso, porque el peso suele incluir valores decimales y acepta un pequeño margen de error. Como estos tipos de datos pueden almacenar valores aproximados, son más adecuados para las columnas de peso. 

El tipo de datos DECIMAL se utiliza habitualmente para almacenar precios, porque los valores financieros como los precios no aceptan ni siquiera un pequeño error de redondeo. Esta precisión sólo se da con el tipo de dato decimal (por ejemplo, DECIMAL(10, 2) para 10 dígitos, con 2 después del punto decimal).

24. ¿Cómo encontrar filas duplicadas en SQL con una función de ventana? 

A continuación te explicamos cómo puedes encontrar duplicados utilizando la función de ventana ROW_NUMBER():

WITH DuplicateCheck AS (
    SELECT product_name, 
           category,
           ROW_NUMBER() OVER(
               PARTITION BY product_name, category 
               ORDER BY id
           ) AS row_num
    FROM sales
)
SELECT *
FROM DuplicateCheck
WHERE row_num > 1;

Veamos cómo funciona:

1. ROW_NUMBER() asigna un número a cada fila de nuestro resultado. 

2. PARTITION BY agrupa las filas por product_name y category

3. Dentro de cada grupo, las filas se numeran empezando por 1. 

4. Cualquier row_num mayor que 1 indica un duplicado. 

Por ejemplo, si tenemos estos registros

  • Producto A, Categoría X, fila_num = 1
  • Producto A, Categoría X, fila_num = 2 (duplicado)
  • Product B, Category Y, row_num = 1

La consulta nos mostrará la segunda fila ya que su row_num es mayor que 1.

25. ¿Cómo se crea y utiliza un procedimiento almacenado con parámetros en MySQL? Explícalo con un ejemplo. 

Podemos guardar y reutilizar consultas complejas con procedimientos almacenados para que las operaciones de la base de datos sean más eficaces y fáciles de mantener. Veamos cómo crearlos y utilizarlos con parámetros mediante un ejemplo práctico.

Supongamos que tenemos una base de datos de alumnos y queremos crear un procedimiento para filtrar a los alumnos por edad. Así es como podemos hacerlo:

En primer lugar, vamos a crear un procedimiento almacenado sencillo que tome un parámetro de edad:

CREATE PROCEDURE get_student_info(IN age INT)
BEGIN
    SELECT * FROM student WHERE student.age = age;
END;

Para utilizar este procedimiento, simplemente CALL con nuestra edad deseada:

CALL get_student_info(21);

Podemos hacer que nuestros procedimientos sean más sofisticados utilizando parámetros de salida. Por ejemplo, vamos a crear un procedimiento que cuente los alumnos de una edad determinada:

CREATE PROCEDURE count_students_by_age(IN age INT, OUT student_count INT)
BEGIN
    SELECT COUNT(*) INTO student_count FROM students WHERE students.age = age;
END;

Para obtener el resultado de este procedimiento:

SET @count = 0;
CALL count_students_by_age(21, @count);
SELECT @count AS total_students;

26. ¿Por qué es importante la integridad referencial en una base de datos? 

La integridad referencial mantiene la exactitud de las relaciones entre tablas. Cuando creamos una clave externa, nos aseguramos de que los valores de una tabla coinciden con el valor único de la tabla referenciada.

He aquí un ejemplo práctico: Supón que gestionas una base de datos de comercio electrónico. Tienes una tabla Customers y una tabla Orders. Cada pedido debe pertenecer a un cliente real. La integridad referencial, implementada mediante claves foráneas, refuerza esta relación garantizando:

  • No puedes crear un pedido para un cliente inexistente.
  • No puedes eliminar un cliente con pedidos existentes (a menos que configures específicamente lo que debe ocurrir con esos pedidos).
  • No puedes actualizar el ID de un cliente si ese cliente tiene pedidos existentes.

Así, cuando creas una restricción de clave foránea como ésta

ALTER TABLE Orders
ADD FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);

La base de datos aplica automáticamente estas normas:

  • Cada CustomerID de la tabla Orders debe existir en la tabla Customers.
  • Los intentos de infringir estas normas (como insertar un CustomerID no válido) serán rechazados.

Así se evitan incoherencias en los datos que podrían causar graves problemas, como pedidos que no pueden rastrearse hasta los clientes reales o informes generados con información de clientes que falta. 

Preguntas de la entrevista MySQL para administradores de bases de datos

Si estás solicitando específicamente un puesto de administrador de base de datos, aquí tienes algunas preguntas que pueden hacerte los reclutadores.

27. ¿Por qué una gran aplicación utilizaría la fragmentación de bases de datos? Háblame también de los retos que supone. 

Una gran aplicación utiliza la fragmentación de bases de datos para dividir los big data entre varios servidores. Cada parte o fragmento contiene una pequeña parte de los datos. Como reparte la carga de datos, no hace falta hardware de gama alta. Aunque la velocidad y la escalabilidad también mejoran, también tiene algunos retos: 

  • Algunas consultas, como las uniones, pueden no funcionar, lo que puede complicar la gestión de los datos. 
  • Cuando los datos crecen, los fragmentos pueden saturarse, creando puntos calientes que ralenticen el rendimiento. 

28. Explica el papel de los redo logs en la recuperación de fallos de MySQL. 

Cada vez que se modifican datos en MySQL, hay que escribirlos en el disco. Sin embargo, escribir directamente en archivos de datos es lento y arriesgado. Por eso, antes de que MySQL modifique ningún fichero de datos, primero escribe lo que va a hacer en el registro de rehacer. Esto es más seguro que actualizar aleatoriamente los archivos de datos.

Supongamos que actualizas la dirección de un cliente:

  1. MySQL escribe primero este cambio en el registro de rehacer.
  2. Entonces reconoce tu transacción como comprometida.
  3. Finalmente, aplica el cambio a los archivos de datos reales.

La recuperación de fallos es importante si MySQL se bloquea después de los pasos 1 ó 2, pero antes del paso 3. Cuando MySQL se reinicia, mira sus registros de rehacer y luego completa cualquier trabajo inacabado reproduciendo los cambios registrados en los registros de rehacer. Esto garantiza que las transacciones comprometidas no se pierdan, incluso si MySQL se bloquea en un momento inoportuno.

29. ¿Cuáles son los distintos motores de almacenamiento disponibles en MySQL y en qué se diferencian?

MySQL admite varios motores de almacenamiento, cada uno optimizado para diferentes casos de uso. Aquí tienes una comparación de los más comunes:

Motor de almacenamiento

Características

Casos prácticos

InnoDB

- Motor de almacenamiento por defecto.

- Compatible con ACID.

- Bloqueo a nivel de fila.

- Admite transacciones y claves foráneas.

Aplicaciones que requieren una gran integridad de los datos, como las plataformas de comercio electrónico o los sistemas financieros.

MyISAM

- Rápido para operaciones pesadas de lectura.

- Bloqueo a nivel de tabla.

- No admite transacciones ni claves foráneas.

Aplicaciones de lectura intensiva en las que la velocidad es más crítica que la integridad de los datos.

Memoria

- Almacena los datos en la memoria RAM.

- Extremadamente rápido.

- Los datos se pierden al reiniciar.

- Tamaño limitado.

Almacenamiento temporal de datos, caché o gestión de sesiones.

CSV

- Almacena los datos en archivos CSV sin formato.

- Fácil integración con herramientas externas.

- No admite indexación.

Intercambio de datos entre aplicaciones o para el simple almacenamiento de datos sin necesidad de consultas complejas.

Archivo

- Optimizado para alta compresión.

- Sólo admite operaciones INSERT y SELECT.

- No hay índices.

Almacenamiento de datos históricos o de registro cuya recuperación es poco frecuente.

NDB (en clúster)

- Almacenamiento distribuido para MySQL Cluster.

- Alta disponibilidad y tolerancia a fallos.

- Admite transacciones.

Aplicaciones distribuidas a gran escala que requieren rendimiento en tiempo real.

30. ¿Cómo se establece un motor de almacenamiento por defecto en MySQL? 

En primer lugar, puedes comprobar el motor de almacenamiento predeterminado actual:

SHOW ENGINES;

Se recomienda InnoDB como motor por defecto, ya que admite funciones importantes como:

  • Transacciones compatibles con ACID
  • Restricciones de clave foránea
  • Recuperación de accidentes
  • Bloqueo a nivel de fila

Para cambiar temporalmente el motor predeterminado de mi sesión actual, puedes utilizar

SET default_storage_engine = 'InnoDB';

Para un cambio permanente, puedes modificar el archivo de configuración de MySQL añadiendo esta línea en la sección [mysqld]:

default-storage-engine = InnoDB

31. ¿Cómo reparar tablas corruptas en MySQL? 

Primero, puedes comprobar todas las bases de datos con este comando: 

mysqlcheck --check --all-databases -u root -p

Escaneará todas las tablas e informará si hay alguna corrupción. A continuación, puedes ejecutar la siguiente consulta para reparar la tabla: 

mysqlcheck --repair database_name table_name -u root -p

Las reparaciones pueden provocar la pérdida de datos en casos de corrupción grave, así que asegúrate de hacer una copia de seguridad de los datos.

Preguntas de la entrevista MySQL basadas en escenarios y en la resolución de problemas

Estas preguntas miden tu experiencia en situaciones complejas del mundo real y tu capacidad para resolver problemas.

32. Explica una situación en la que hayas utilizado subconsultas en MySQL.

He aquí cómo puedes responder a una pregunta como ésta:

En mi reciente trabajo gestioné la base de datos de una tienda de comercio electrónico, donde tuve que preparar un informe de productos. El objetivo era encontrar productos que generaran ventas superiores a la media, lo que requería utilizar subconsultas para realizar este análisis de varios pasos.

Aquí tienes la consulta SQL que desarrollé para resolver esto:

SELECT 
    p.product_id,
    p.product_name,
    s.sales_amount
FROM products p
JOIN sales s ON p.product_id = s.product_id
WHERE s.sales_amount > (
    SELECT AVG(sales_amount)
    FROM sales
)
ORDER BY s.sales_amount DESC;

En primer lugar, establecí nuestra base de referencia calculando el importe medio de las ventas de todos los productos. Para ello, utilicé una subconsulta en la cláusula WHERE que calculaba AVG(sales_amount) a partir de la tabla de ventas. Esta subconsulta actuaba como umbral dinámico con el que medir el rendimiento de cada producto.

A continuación, la consulta principal unió las tablas de productos y ventas para extraer los detalles relevantes de los productos, mientras que la cláusula WHERE filtró todos los productos con ventas inferiores a nuestra media calculada. 

Al estructurar la consulta de este modo, podía identificar los productos de alto rendimiento en una sola operación de la base de datos, en lugar de ejecutar varias consultas por separado.

33. ¿Puedes explicar una situación en la que hayas utilizado uniones SQL para combinar datos de varias tablas? 

He aquí un ejemplo de respuesta a la pregunta anterior:

Hace poco, estuve trabajando en un proyecto en el que teníamos dos tablas principales: una con datos de ventas de productos y otra con detalles de productos. Mi tarea consistía en crear un informe que mostrara sales, product name, category, y price.

Para combinar los datos relevantes, utilicé un INNER JOIN en la columna común, product_id, para vincular las transacciones de venta con los detalles del producto:

SELECT 
    s.sales_date,
    p.product_name,
    p.category,
    s.quantity_sold,
    p.price
FROM 
    sales s
INNER JOIN 
    products p
ON 
    s.product_id = p.product_id;

El informe proporcionó una imagen clara de las tendencias de ventas, ayudando a las partes interesadas a identificar qué categorías de productos estaban funcionando bien y cuáles necesitaban atención.

34. ¿Tienes alguna experiencia con los desencadenantes? Explica cómo los has utilizado.

He aquí un ejemplo de respuesta a la pregunta anterior:

Sí, tengo mucha experiencia con los activadores de bases de datos. En mi reciente función, implementé un activador AFTER UPDATE para la auditoría de cambios de precios. 

Deja que te guíe a través de la aplicación concreta: He creado un activador que captura automáticamente el historial de precios cada vez que cambia el precio de un producto. Aquí tienes el script SQL que he desarrollado:

CREATE TRIGGER tr_AuditPriceChanges
ON Products
AFTER UPDATE AS
BEGIN
    -- Only execute if the price was actually changed
    IF UPDATE(UnitPrice)
    BEGIN
        INSERT INTO PriceAudit (
            ProductID,
            OldPrice,
            NewPrice,
            ChangedBy,
            ChangeDate,
            PercentageChange
        )
        SELECT 
            i.ProductID,
            d.UnitPrice AS OldPrice,
            i.UnitPrice AS NewPrice,
            SYSTEM_USER,
            GETDATE(),
            ROUND(((i.UnitPrice - d.UnitPrice) / d.UnitPrice * 100), 2)
        FROM INSERTED i
        JOIN DELETED d ON i.ProductID = d.ProductID
        WHERE i.UnitPrice <> d.UnitPrice;
    END
END;

Lo que hizo que esta solución fuera especialmente eficaz fue

  1. Sólo se dispara cuando realmente se producen cambios en los precios.
  2. Captura al usuario que realiza el cambio utilizando SYSTEM_USER.
  3. Calcula el cambio porcentual a efectos de información.
  4. Incluye una cláusula WHERE para filtrar los no cambios que puedan producirse por actualizaciones de otras columnas.

También añadí la gestión de errores y el registro cuando detectamos algunos casos extremos con los precios de NULL.

Consejos para preparar una entrevista MySQL

Si estás empezando tu carrera, aquí tienes algunos consejos que te ayudarán a superar tu próxima entrevista:

Domina los conceptos básicos de MySQL: Learn los fundamentos de las bases de datos, como la indexación, las transacciones y el optimizador de consultas. Comprende cómo MySQL procesa las consultas y gestiona el almacenamiento de datos. Esto te ayudará a redactar consultas eficaces y a explicar tus soluciones durante la entrevista.

Adquiere experiencia práctica: Instala MySQL en tu ordenador y practicae regularmente. Crea bases de datos de prueba, escribe distintos tipos de consultas e intenta optimizarlas. La práctica real es la mejor manera de aprender cómo funcionan las cosas y de ganar confianza para la entrevista.

Para refrescar aún más tus conocimientos, consulta los recursos de DataCamp: 

Conoce las herramientas e integraciones de MySQL: Familiarízate con MySQL Workbench u otras herramientas de gestión de bases de datos y supervisión básica. You también puedes explorar cómo funciona MySQL con Python y los frameworks pertinentes, demostrando que puedes trabajar en un entorno de desarrollo real.

Conclusión

¡Ahí lo tienes! He cubierto las 34 mejores preguntas de entrevista sobre MySQL para ayudarte a conseguir tu próximo trabajo. Tanto si aspiras a un puesto inicial como a un puesto avanzado de administrador de datos, debes tener un sólido conocimiento de los fundamentos de MySQL, la optimización de consultas y la gestión de bases de datos para destacar. 

Para ampliar tus conocimientos sobre otros sistemas de gestión de bases de datos, consulta los cursos de SQL de DataCamp .

Certifícate en SQL

Demuestra que tus conocimientos de SQL están preparados para el trabajo con una certificación.

Laiba Siddiqui's photo
Author
Laiba Siddiqui
LinkedIn
Twitter

Soy una estratega de contenidos a la que le encanta simplificar temas complejos. He ayudado a empresas como Splunk, Hackernoon y Tiiny Host a crear contenidos atractivos e informativos para su público.

Temas

Aprende más sobre SQL con estos cursos

curso

Intermediate SQL

4 hr
294.7K
Accompanied at every step with hands-on practice queries, this course teaches you everything you need to know to analyze data using your own SQL code today!
Ver detallesRight Arrow
Comienza El Curso
Ver másRight Arrow
Relacionado

blog

Las 80 mejores preguntas y respuestas de entrevistas SQL para principiantes y profesionales intermedios

Este artículo ofrece una visión completa de 80 preguntas y respuestas esenciales sobre SQL para los que buscan trabajo, los directores de RR. HH. y los reclutadores, y abarca tanto temas generales como preguntas técnicas.
Elena Kosourova's photo

Elena Kosourova

12 min

Data engineering interview q and a

blog

Las 21 mejores preguntas y respuestas de la entrevista sobre ingeniería de datos

Con estas preguntas y respuestas de las mejores entrevistas sobre ingeniería de datos, te asegurarás de que aciertas en tu próxima entrevista.
Abid Ali Awan's photo

Abid Ali Awan

16 min

blog

Las 23 mejores preguntas y respuestas de entrevistas sobre Python

Preguntas esenciales de una entrevista sobre Python con ejemplos para solicitantes de empleo, estudiantes de último curso y profesionales de los datos.
Abid Ali Awan's photo

Abid Ali Awan

17 min

blog

30 preguntas de entrevista sobre Azure: De Básico a Avanzado

Una recopilación de las mejores preguntas para entrevistas sobre Azure adaptadas a todos los niveles de experiencia. Tanto si eres un candidato principiante, intermedio o avanzado, estas preguntas y respuestas te ayudarán a prepararte con confianza para tu próxima entrevista de trabajo relacionada con Azure.
Josep Ferrer's photo

Josep Ferrer

30 min

blog

Las 30 mejores preguntas de entrevista sobre Excel para todos los niveles

Una guía de las preguntas más habituales en las entrevistas de Excel para que los usuarios principiantes, intermedios y avanzados superen la entrevista técnica.
Chloe Lubin's photo

Chloe Lubin

17 min

Machine Learning Interview Questions

blog

Las 25 preguntas más frecuentes en las entrevistas sobre aprendizaje automático para 2024

Explore las mejores preguntas de entrevista sobre aprendizaje automático con respuestas para estudiantes de último curso y profesionales.
Abid Ali Awan's photo

Abid Ali Awan

15 min

See MoreSee More