Accéder au contenu principal

Top 34 des questions d'entretien MySQL et réponses pour 2025

Maîtrisez MySQL grâce à ce guide des questions d'entretien, avec des exemples concrets et des conseils d'experts pour vous aider à exceller lors de votre prochain entretien sur les bases de données !
Actualisé 26 déc. 2024  · 35 min de lecture

Avez-vous déjà remarqué que MySQL est exigé dans presque toutes les descriptions d'emploi liées aux bases de données ? Il y a une bonne raison à cela : MySQL est à l'origine de tout, de vos plateformes de médias sociaux préférées aux applications que vous utilisez quotidiennement.

J'ai élaboré ce guide pour vous aider à répondre aux questions d'entretien concernant MySQL. Je couvrirai toutes les bases, depuis les notions élémentaires que les développeurs débutants doivent connaître jusqu'aux éléments complexes qu'exigent les postes de direction. Je vous donnerai également quelques conseils pour vous aider à apparaître comme un candidat confiant lors de vos prochains entretiens liés aux données. 

Qu'est-ce que MySQL ?

MySQL est un SGBDR (système de gestion de bases de données relationnelles) open-source basé sur SQL qui organise les données dans des tableaux structurés. Il a été développé par Oracle Corporation.

Il s'est classé comme le SGBD le plus populaire en 2024 car de plus en plus d'entreprises migrent leurs données vers MySQL. C'est pourquoi, si vous envisagez de trouver un emploi dans le domaine des bases de données, il est très important de connaître MySQL et les bases de données relationnelles. 

Graphique montrant les systèmes de base de données les plus populaires en 2024, MySQL étant le plus populaire, suivi de PostgreSQL.

En juin 2024, MySQL est le système de gestion de base de données (SGBD) open-source le plus populaire au monde, avec un score de 1061. Source : Statista.

Questions d'entretien de base sur MySQL

Lors de la phase initiale de l'entretien, l'examinateur peut poser des questions fondamentales pour évaluer votre compréhension des concepts de base des bases de données et de MySQL. 

1. Qu'est-ce qu'une base de données et en quoi est-elle différente d'un SGBD ? 

Une base de données est un conteneur de stockage qui contient des données auxquelles nous pouvons accéder, que nous pouvons modifier et analyser. Par exemple, les plateformes de médias sociaux stockent dans des bases de données des informations sur les personnes qui ont aimé nos messages.

Un SGBD (système de gestion de base de données) est le logiciel qui nous permet d'interagir avec ces données et de les gérer en créant des utilisateurs et en gérant leur accès. MySQL est l'un des SGBD les plus populaires. D'autres exemples include PostgreSQL, MongoDB et Microsoft SQL Server.

2. En quoi MySQL diffère-t-il des autres systèmes de gestion de bases de données relationnelles ?

MySQL est un système de gestion de bases de données relationnelles (SGBDR) open-source qui utilise SQL pour gérer les données. Il est réputé pour sa facilité d'utilisation, sa rapidité et sa compatibilité avec les applications web. 

Voici en quoi MySQL diffère des autres SGBDR :

  • Simplicité et performance : MySQL est souvent loué pour sa simplicité et ses performances optimisées, ce qui en fait un choix de prédilection pour les développeurs web et les startups.
  • Fonctions avancées : Si MySQL excelle par sa facilité d'utilisation, il peut manquer des fonctionnalités avancées d'autres SGBDR comme PostgreSQL, telles que la prise en charge plus complète des transactions ACID, l'indexation avancée et un ensemble plus large de types de données.
  • Moteurs de stockage : MySQL vous permet de choisir différents moteurs de stockage (par exemple, InnoDB, MyISAM) pour les tableaux, ce qui leur confère une certaine souplesse pour des cas d'utilisation spécifiques.

MySQL est idéal pour les scénarios nécessitant rapidité et évolutivité, mais pour des fonctionnalités plus complexes ou de niveau entreprise, PostgreSQL peut s'avérer un meilleur choix.

3. Quels sont les principaux types de données disponibles dans MySQL ?

MySQL prend en charge une variété de types de données catégorisés comme suit :

  • Numérique : INT, DECIMAL, FLOAT, DOUBLE, etc.
  • Chaîne : CHAR, VARCHAR, TEXT, BLOB.
  • Date/heure : DATE, DATETIME, TIMESTAMP, TIME.
  • JSON : Pour le stockage d'objets JSON.

4. Quelle est la différence entre les types de données INT et DECIMAL ? 

INT stocke des nombres entiers sans décimales. Nous pouvons l'utiliser s'il n'y a pas besoin de fractions. En revanche, DECIMAL peut stocker des valeurs financières et convient pour des calculs précis avec des décimales. 

5. Quelle est la différence entre DATE et DATETIME dans MySQL ? 

La fonction DATE de MySQL stocke la date au format année, mois et jour : 

YYYY-MM-DD

Cependant, la fonction DATETIME enregistre la date avec l'heure, ce qui donne ceci : 

YYYY-MM-DD HH:MM:SS 

6. Qu'est-ce qu'une clé étrangère et comment l'utilisez-vous dans les bases de données ? 

Une clé étrangère est un champ d'un tableau qui renvoie à la clé primaire d'un autre tableau. 

Par exemple, dans un tableau customers qui stocke des informations sur les clients, chaque client a un numéro unique customer_id- dans un autre tableau appelé transactions (qui stocke les enregistrements d'achats), nous utilisons customer_id comme clé étrangère. L'adresse customer_id dans le tableau des transactions reliera chaque achat à un client spécifique dans letableau customers .

Voici ce que cela donne 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. Quelles sont les différences entre INNER JOIN, LEFT JOIN, RIGHT JOIN et FULL JOIN ?

Les jointures combinent les lignes de deux tableaux ou plus sur la base de colonnes liées. Voici leurs différences :

  • INNER JOIN : Renvoie les lignes pour lesquelles il existe une correspondance dans les deux tableaux.
  • JOINDRE A LA GAUCHE : Renvoie tous les tableaux du tableau de gauche et les tableaux correspondants du tableau de droite. S'il n'y a pas de correspondance, NULL est renvoyé pour les tableaux de la bonne table.
  • JOIGNEZ-VOUS À DROIT : Semblable à LEFT JOIN, elle renvoie tous les tableaux de droite et les tableaux correspondants de gauche.
  • ADHÉSION COMPLÈTE : Combine les résultats des tableaux LEFT JOIN et RIGHT JOIN, y compris les lignes non appariées des deux tableaux.

8. Quelle est la différence entre DELETE, TRUNCATE et DROP dans MySQL ?

Les commandes telles que DELETE, TRUNCATE, et DROP peuvent sembler similaires, mais elles ont en fait un comportement différent :

  • SUPPRIMER : Supprime les tableaux d'un tableau en fonction d'une condition. Elle peut être annulée si elle se trouve à l'intérieur d'une transaction. Exemple :
DELETE FROM employees WHERE department_id = 5;
  • TRUNCATE : Supprime toutes les lignes d'un tableau, mais la structure du tableau reste intacte. Il est plus rapide que DELETE et ne peut pas être annulé. Exemple :
TRUNCATE TABLE employees;
  • DÉPOSEZ : Supprime complètement la structure et les données du tableau, ainsi que toutes les dépendances telles que les index. Exemple :
DROP TABLE employees;

9. Comment créer et modifier un tableau dans MySQL ? Donnez des exemples.

Pour créer des tableaux, vous pouvez utiliser l'instruction CREATE TABLE, et pour les modifier, généralement l'instruction ALTER TABLE. Voici quelques exemples :

  • Créer un tableau :
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50));
  • Modifier pour ajouter une colonne :
ALTER TABLE employees ADD COLUMN salary DECIMAL(10, 2);

10. Qu'est-ce qu'un tableau temporaire en SQL ? 

Un tableau temporaire n'existe que pendant la session de base de données en cours. Une fois la session clôturée, le tableau est supprimé. Ce type de tableau permet de stocker temporairement des résultats intermédiaires. Nous pouvons l'utiliser pour tester, filtrer ou préparer des données avant de les insérer dans un tableau permanent.

En voici un exemple :

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

11. Qu'est-ce qu'une sous-requête dans MySQL ? Expliquez-le à l'aide d'un exemple. 

Une sous-requête (également appelée requête imbriquée) est imbriquée dans une autre requête. Il décompose les opérations complexes de la base de données en étapes plus faciles à gérer. Par exemple, vous pouvez créer une sous-requête pour rechercher les salariés dont la rémunération est supérieure à la moyenne : 

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

Voyons ce qu'il en est :

  1. La requête interne SELECT AVG(salary) FROM employees calcule d'abord le salaire moyen.
  2. La requête externe utilise ensuite cette moyenne pour trouver les salariés dont la rémunération est supérieure à celle-ci. 

12. Comment utiliser une instruction INSERT dans MySQL pour ajouter des données à un tableau ? Par ailleurs, avez-vous des bonnes pratiques en la matière ? 

Nous pouvons utiliser l'instruction INSERT() pour ajouter des données à un tableau. La syntaxe de base est la suivante :

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

Voici quelques bonnes pratiques à suivre lorsque j'utilise la déclaration INSERT():

  1. Dressez une liste explicite de vos colonnes. Cela rend le code plus clair et évite les erreurs en cas de modification ultérieure de la structure du tableau.
  2. Pour les colonnes AUTO_INCREMENT telles que les ID, ignorez-les dans la déclaration INSERT(). MySQL les gère automatiquement afin d'éviter les doublons. 
  3. Soyez cohérent avec les guillemets. Personnellement, je préfère les guillemets simples, mais l'un ou l'autre fonctionne.
  4. Si vous insérez plusieurs lignes, vous pouvez le faire dans une seule instruction pour améliorer les performances.

13. Quelle est la signification de l'attribut AUTO_INCREMENT dans MySQL ?

L'attribut AUTO_INCREMENT de MySQL génère des numéros uniques et séquentiels pour une colonne, généralement la clé primaire d'un tableau.

Voici un exemple de création d'un tableau avec une colonne AUTO_INCREMENT:

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

Et d'y insérer des lignes :

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

14. Qu'est-ce qu'une vue dans MySQL ? 

Une vue est une requête enregistrée qui fonctionne comme un tableau virtuel. Nous pouvons ainsi prendre une requête complexe, lui donner un nom et l'utiliser comme un tableau pour de futures requêtes. De cette manière, vous ne devez pas retaper l'intégralité de la requête à chaque fois.

Par exemple, pour simplifier l'interrogation des détails d'un employé avec le nom de son service, vous pouvez créer une vue :

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;

Vous pouvez maintenant interroger la vue employee_details comme s'il s'agissait d'un tableau :

SELECT * FROM employee_details;

Cependant, nous ne pouvons pas utiliser les vues pour insérer et mettre à jour les données. La plupart prennent en charge l'option de lecture seule et empêchent les utilisateurs d'accéder à la base de données, ce qui renforce la sécurité des données. Les vues peuvent parfois ralentir les requêtes, car elles exécutent la requête sous-jacente à chaque fois qu'on y accède.

Amélioration de SQL pour les débutants

Acquérir les compétences SQL pour interagir avec vos données et les interroger.
Commencez à apprendre gratuitement

Questions d'entretien intermédiaires sur MySQL

Dans cette section, nous aborderons des sujets de niveau intermédiaire. Ces questions sont principalement posées pour tester votre connaissance des types de données et de la structure de MySQL.

15. Que sont les tableaux à version système et comment fonctionnent-ils ? 

Les tableaux à version système conservent un historique complet des modifications apportées à un tableau. Comme ils conservent les versions précédentes de chaque ligne, nous pouvons les utiliser pour auditer et récupérer des données. 

Ils fonctionnent en ajoutant deux colonnes supplémentaires - StartTime et EndTime - pour enregistrer le moment où chaque ligne est valide. Lorsque nous insérons, mettons à jour ou supprimons des données, ces horodatages sont mis à jour :

  • Insérer : Une nouvelle ligne est ajoutée avec une valeur StartTime correspondant à l'horodatage actuel et une valeur EndTime correspondant à 9999-12-31 23:59:59 (ou une valeur similaire représentant "forever"). Cela indique que la ligne est actuellement valide.
  • Mise à jour : La ligne d'origine EndTime est mise à jour avec l'horodatage actuel pour indiquer qu'elle n'est plus valide. Ensuite, une nouvelle ligne contenant les données mises à jour est créée, avec StartTime fixé à l'horodatage actuel et EndTime à "forever".
  • Supprimer : Le site EndTime de la ligne existante est mis à jour avec l'horodatage actuel, ce qui indique que la ligne n'est plus valide.

En utilisant la clause FOR SYSTEM_TIME de SQL, vous pouvez interroger le tableau pour visualiser son état à un moment précis ou sur une période donnée. Par exemple :

  • FOR SYSTEM_TIME AS OF '2024-01-01': Récupère l'état du tableau tel qu'il était le 1er janvier 2024.
  • FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31': Affiche toutes les lignes valides dans cette plage de dates.

16. Que sont les transactions MySQL et comment les utiliser ?

Les transactions sont un ensemble d'opérations exécutées en tant qu'unité unique. Ils garantissent l'intégrité des données en permettant à toutes les opérations de réussir ou d'échouer ensemble.

Voici un exemple de leur utilisation :

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'est-ce qu'une contrainte par défaut dans MySQL ? Comment définir une valeur par défaut pour une colonne ?

Une contrainte par défaut dans MySQL attribue une valeur par défaut à une colonne lorsqu'aucune valeur explicite n'est fournie lors d'une opération INSERT. Cela garantit la validité de la colonne même si l'utilisateur l'omet lors de la saisie des données.

Voici comment créer un tableau avec une valeur par défaut :

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

Ensuite, vous pouvez insérer une ligne sans spécifier l'adresse status:

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

Cette approche réduit la probabilité d'avoir NULL ou des données invalides dans les colonnes critiques et simplifie les requêtes en supprimant la nécessité de traiter explicitement les cas par défaut.

Résultat :

Champ d'application

Type

Nul

Clé

Défaut

Extra

id

INT

NON

PRI

NULL

AUTO_INCREMENT

nom

VARCHAR(50)

OUI

 

NULL

 

status

VARCHAR(10)

OUI

 

actif

 

Cette commande est utile pour les raisons suivantes :

  • Il aide les développeurs à comprendre le schéma du tableau avant d'écrire des requêtes.
  • Il peut être utilisé pour le débogage, en particulier lorsque vous travaillez avec des bases de données que vous ne connaissez pas.
  • Il identifie rapidement les contraintes, telles que les clés primaires ou les valeurs par défaut.

19. Comment utiliseriez-vous les fonctions de chaîne de caractères dans SQL pour gérer du texte ? 

Les différentes fonctions de chaînes de caractères de SQL permettent de travailler avec des noms et d'autres données textuelles. Par exemple :

  • La fonction LENGTH() permet d'afficher le nombre de caractères d'un nom. 
  • UPPER() et LOWER() convertissent le texte en majuscules ou en minuscules. 
  • CONCAT() joint le prénom et le nom de famille dans une colonne. 
  • SUBSTRING() extrait des parties spécifiques du texte. Par exemple, nous pouvons l'utiliser pour séparer le mois de la date de naissance. 

Voici un exemple de requête :

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;

Cette requête :

  • Convertit les noms en majuscules.
  • Combine le prénom et le nom de famille en un nom complet.
  • Extrait le mois de naissance d'une colonne birthdate.
  • Supprime les espaces des noms de famille.
  • Remplace toutes les occurrences de "a" par "@" dans les prénoms.

20. Comment mettre à jour une ligne spécifique dans une base de données avec SQL ?

Vous pouvez utiliser l'instruction UPDATE et la clause WHERE pour identifier l'enregistrement que vous souhaitez modifier. 

Par exemple, si vous souhaitez mettre à jour le genre du film "Inception" de 2010 à "Science-fiction", vous pouvez utiliser la requête suivante : 

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

Ici, UPDATE movies spécifie le tableau que nous voulons mettre à jour, et la clause WHERE cible la ligne où le titre est "Inception" et l'année "2010". 

Questions d'entretien avancées sur MySQL

Les questions d'entretien avancées testent votre capacité à gérer des scénarios MySQL complexes et donnent à l'examinateur une idée de vos capacités de prise de décision. 

21. Qu'est-ce qu'un trigger dans MySQL ? Comment le mettez-vous en œuvre ? 

Dans MySQL, un déclencheur est un ensemble d'actions qui s'exécutent lorsqu'un événement se produit dans la base de données. Les déclencheurs peuvent être configurés pour s'exécuter avant ou après des événements tels que INSERT, UPDATE ou DELETE

Supposons, par exemple, qu'il existe un tableau orders dans lequel les nouvelles commandes sont ajoutées. Nous pouvons créer un déclencheur qui enregistre chaque nouvelle commande dans un tableau 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;

Après l'exécution du déclencheur, le tableau order_history estautomatiquement mis à jour :

history_id

order_id

action

timestamp

1

1

inséré

2024-12-24 10:00:00

2

2

inséré

2024-12-24 11:00:00

22. Pourquoi l'ajout d'un index rend-il les requêtes SQL plus rapides ? 

S'il n'y a pas d'index, la base de données devra parcourir chaque ligne pour trouver une entrée spécifique. Un index agit comme une table des matières, permettant à la base de données d'accéder aux tableaux pertinents. L'ajout d'un index permet donc de réduire le temps de recherche et d'accélérer l'exécution des requêtes. 

Les index sont généralement mis en œuvre à l'aide de structures de données telles que les arbres B ou les tableaux de hachage, qui permettent à la base de données d'effectuer des recherches, des consultations et des balayages de plage de manière efficace.

Voici un exemple de création d'un index :

-- 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.

Les indices présentent par exemple certains inconvénients :

  • Opérations d'écriture plus lentes : INSERT, UPDATE, et DELETE operations are slower because the index must be updated each time data changes.
  • Coût de stockage : Les index nécessitent un espace de stockage supplémentaire.

23. Quel type de données devons-nous utiliser pour le poids et le prix du produit dans un tableau SQL, et pourquoi ? 

Nous utilisons le type de données FLOAT ou REAL pour stocker le poids parce que le poids comprend souvent des valeurs décimales et accepte une petite marge d'erreur. Comme ces types de données peuvent stocker des valeurs approximatives, ils conviennent mieux aux colonnes de poids. 

Le type de données DECIMAL est couramment utilisé pour stocker des prix, car les valeurs financières telles que les prix n'acceptent pas d'erreur d'arrondi, même minime. Cette précision ne s'applique qu'au type de données décimales (par exemple, DECIMAL(10, 2) pour 10 chiffres, avec 2 après la virgule).

24. Comment trouver les lignes dupliquées dans SQL avec une fonction window ? 

Voici comment vous pouvez trouver des doublons à l'aide de la fonction de la fenêtre 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;

Voyons comment cela fonctionne :

1. ROW_NUMBER() attribue un numéro à chaque ligne de notre résultat. 

2. PARTITION BY regroupe les lignes par product_name et category

3. Dans chaque groupe, les lignes sont numérotées à partir de 1. 

4. Tout row_num supérieur à 1 indique un doublon. 

Par exemple, si nous disposons de ces enregistrements :

  • Produit A, catégorie X, numéro de ligne = 1
  • Produit A, catégorie X, numéro de ligne = 2 (duplicate)
  • Produit B, catégorie Y, numéro de ligne = 1

La requête nous montrera la deuxième ligne puisque son row_num est supérieur à 1.

25. Comment créer et utiliser une procédure stockée avec des paramètres dans MySQL ? Expliquez-le à l'aide d'un exemple. 

Nous pouvons enregistrer et réutiliser des requêtes complexes à l'aide de procédures stockées afin de rendre les opérations de la base de données plus efficaces et plus faciles à maintenir. Voyons comment les créer et les utiliser avec des paramètres à travers un exemple pratique.

Supposons que nous ayons une base de données d'étudiants et que nous voulions créer une procédure pour filtrer les étudiants par âge. Voici comment nous pouvons le faire :

Tout d'abord, créons une procédure stockée simple qui prend un paramètre d'âge :

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

Pour utiliser cette procédure, il suffit de l'envoyer à CALL avec l'âge souhaité :

CALL get_student_info(21);

Nous pouvons rendre nos procédures plus sophistiquées en utilisant des paramètres de sortie. Par exemple, créons une procédure qui compte les étudiants d'un âge spécifique :

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;

Pour obtenir le résultat de cette procédure :

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

26. Pourquoi l'intégrité référentielle est-elle importante dans une base de données ? 

L'intégrité référentielle garantit l'exactitude des relations entre les tableaux. La création d'une clé étrangère permet de s'assurer que les valeurs d'un tableau correspondent à la valeur unique du tableau référencé.

Voici un exemple concret : Supposons que vous gériez une base de données de commerce électronique. Vous disposez d'un tableau Customers et d'un tableau Orders. Chaque commande doit appartenir à un client réel. L'intégrité référentielle, mise en œuvre par le biais de clés étrangères, renforce cette relation en garantissant :

  • Vous ne pouvez pas créer une commande pour un client inexistant.
  • Vous ne pouvez pas supprimer un client avec des commandes existantes (à moins que vous ne configuriez spécifiquement ce qu'il doit advenir de ces commandes).
  • Vous ne pouvez pas mettre à jour l'identifiant d'un client si celui-ci a déjà des commandes en cours.

Ainsi, lorsque vous créez une contrainte de clé étrangère comme celle-ci :

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

La base de données applique automatiquement ces règles :

  • Tous les CustomerID du tableau Orders doivent exister dans le tableau Customers.
  • Les tentatives de violation de ces règles (comme l'insertion d'un CustomerID invalide) seront rejetées.

Cela permet d'éviter les incohérences de données qui pourraient causer de graves problèmes, comme des commandes qui ne peuvent pas être retracées jusqu'aux clients réels ou des rapports générés avec des informations manquantes sur les clients. 

Questions d'entretien sur MySQL pour les administrateurs de bases de données

Si vous postulez spécifiquement pour un poste d'administrateur de base de données, voici quelques questions que les recruteurs peuvent vous poser.

27. Pourquoi une grande application utiliserait-elle le sharding de base de données ? Parlez-moi également des difficultés rencontrées. 

Une grande application utilise le partage de base de données pour répartir les données volumineuses sur plusieurs serveurs. Chaque partie ou morceau contient une petite partie des données. Comme il répartit la charge de données, il n'est pas nécessaire de disposer d'un matériel haut de gamme. Bien que la vitesse et l'évolutivité s'améliorent également, il y a aussi des défis à relever : 

  • Certaines requêtes, comme les jointures, peuvent ne pas fonctionner, ce qui peut compliquer la gestion des données. 
  • Lorsque les données s'accroissent, les ensembles peuvent être submergés, créant des points chauds qui ralentissent les performances. 

28. Expliquez le rôle des redo logs dans la récupération des pannes de MySQL. 

Chaque fois que des données sont modifiées dans MySQL, elles doivent être écrites sur le disque. Toutefois, l'écriture directe dans les fichiers de données est lente et risquée. C'est pourquoi, avant de modifier des fichiers de données, MySQL écrit d'abord ce qu'il va faire dans le fichier journal. Cette méthode est plus sûre que la mise à jour aléatoire des fichiers de données.

Supposons que vous mettiez à jour l'adresse d'un client :

  1. MySQL écrit d'abord cette modification dans le fichier journal (redo log).
  2. Il reconnaît alors que votre transaction a été validée.
  3. Enfin, il applique la modification aux fichiers de données réels.

La reprise sur incident est importante si MySQL tombe en panne après l'étape 1 ou 2, mais avant l'étape 3. Lorsque MySQL redémarre, il consulte ses redo logs et termine le travail inachevé en rejouant les modifications enregistrées dans les redo logs. Cela garantit que les transactions validées ne sont pas perdues, même si MySQL tombe en panne à un moment inopportun.

29. Quels sont les différents moteurs de stockage disponibles dans MySQL, et en quoi diffèrent-ils ?

MySQL supporte plusieurs moteurs de stockage, chacun optimisé pour des cas d'utilisation différents. Voici une comparaison des plus courantes :

Moteur de stockage

Caractéristiques

Cas d'utilisation

InnoDB

- Moteur de stockage par défaut.

- Conforme à la norme ACID.

- Verrouillage au niveau de la ligne.

- Prend en charge les transactions et les clés étrangères.

Applications nécessitant une grande intégrité des données, telles que les plateformes de commerce électronique ou les systèmes financiers.

MyISAM

- Rapide pour les opérations de lecture intensive.

- Verrouillage au niveau du tableau.

- Pas de prise en charge des transactions ou des clés étrangères.

Applications à lecture intensive où la vitesse est plus importante que l'intégrité des données.

Mémoire

- Stocke les données dans la mémoire vive.

- Extrêmement rapide.

- Les données sont perdues au redémarrage.

- Taille limitée.

Stockage temporaire de données, mise en cache ou gestion de sessions.

CSV

- Stocke les données dans des fichiers CSV simples.

- Intégration facile avec des outils externes.

- Pas de support d'indexation.

Échange de données entre applications ou stockage simple de données sans besoin d'interrogation complexe.

Archives

- Optimisé pour une compression élevée.

- Ne prend en charge que les opérations INSERT et SELECT.

- Pas d'index.

Stockage de données historiques ou de journaux lorsque la récupération des données n'est pas fréquente.

NDB (en grappe)

- Stockage distribué pour MySQL Cluster.

- Haute disponibilité et tolérance aux pannes.

- Prend en charge les transactions.

Applications distribuées à grande échelle nécessitant des performances en temps réel.

30. Comment définir un moteur de stockage par défaut dans MySQL ? 

Tout d'abord, vous pouvez vérifier le moteur de stockage par défaut actuel :

SHOW ENGINES;

InnoDB est recommandé comme moteur par défaut, car il prend en charge des fonctions importantes telles que la gestion des données :

  • Transactions conformes à la norme ACID
  • Contraintes de clés étrangères
  • Récupération en cas d'accident
  • Verrouillage au niveau des lignes

Pour changer temporairement le moteur par défaut pour ma session actuelle, vous pouvez utiliser :

SET default_storage_engine = 'InnoDB';

Pour un changement permanent, vous pouvez modifier le fichier de configuration de MySQL en ajoutant cette ligne dans la section [mysqld]:

default-storage-engine = InnoDB

31. Comment réparer des tableaux corrompus dans MySQL ? 

Tout d'abord, vous pouvez vérifier toutes les bases de données à l'aide de cette commande : 

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

Il analyse tous les tableaux et signale toute corruption éventuelle. Vous pouvez ensuite exécuter la requête suivante pour réparer le tableau : 

mysqlcheck --repair database_name table_name -u root -p

Les réparations peuvent entraîner la perte de données en cas de corruption grave ; veillez donc à sauvegarder les données.

Questions d'entretien sur MySQL basées sur des scénarios et la résolution de problèmes

Ces questions évaluent votre expérience des scénarios complexes du monde réel et votre capacité à résoudre des problèmes.

32. Expliquez un scénario dans lequel vous avez utilisé des sous-requêtes dans MySQL.

Voici comment vous pouvez répondre à une telle question :

Dans mon dernier emploi, je gérais la base de données d'un magasin de commerce électronique et je devais préparer un rapport sur les produits. L'objectif était de trouver les produits qui généraient des ventes supérieures à la moyenne, ce qui nécessitait l'utilisation de sous-requêtes pour effectuer cette analyse en plusieurs étapes.

Voici la requête SQL que j'ai développée pour résoudre ce problème :

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;

Tout d'abord, j'ai établi notre base de référence en calculant le montant moyen des ventes pour tous les produits. Pour ce faire, j'ai utilisé une sous-requête dans la clause WHERE qui calcule AVG(sales_amount) à partir du tableau des ventes. Cette sous-requête a servi de seuil dynamique par rapport auquel les performances de chaque produit ont pu être mesurées.

La requête principale associe ensuite les tableaux des produits et des ventes pour obtenir les détails pertinents sur les produits, tandis que la clause WHERE filtre tous les produits dont les ventes sont inférieures à la moyenne calculée. 

En structurant la requête de cette manière, j'ai pu identifier les produits les plus performants en une seule opération sur la base de données, au lieu d'exécuter plusieurs requêtes distinctes.

33. Pouvez-vous expliquer une situation dans laquelle vous avez utilisé des jointures SQL pour combiner des données provenant de plusieurs tableaux ? 

Voici un exemple de réponse à la question ci-dessus :

Récemment, j'ai travaillé sur un projet dans lequel nous avions deux tableaux principaux - l'un avec les données de vente des produits et l'autre avec les détails des produits. Ma tâche consistait à créer un rapport indiquant sales, product name, category, et price.

Pour combiner les données pertinentes, j'ai utilisé un INNER JOIN sur la colonne commune, product_id, afin de relier les transactions de vente aux détails du produit :

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;

Le rapport a fourni une image claire des tendances des ventes, aidant les parties prenantes à identifier les catégories de produits qui fonctionnent bien et celles qui nécessitent une attention particulière.

34. Avez-vous une expérience des déclencheurs ? Expliquez comment vous les avez utilisés.

Voici un exemple de réponse à la question ci-dessus :

Oui, j'ai une grande expérience des déclencheurs de base de données. Dans le cadre de mes fonctions récentes, j'ai mis en place un déclencheur AFTER UPDATE pour l'audit des changements de prix. 

Permettez-moi de vous présenter la mise en œuvre spécifique : J'ai créé un déclencheur qui capture automatiquement l'historique des prix lorsque le prix d'un produit change. Voici le script SQL que j'ai développé :

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;

Cette solution a été particulièrement efficace :

  1. Il ne se déclenche que lorsque des changements de prix se produisent réellement.
  2. Il capture l'utilisateur qui effectue la modification à l'aide de SYSTEM_USER.
  3. Il calcule le pourcentage de variation à des fins de reporting.
  4. Elle comprend une clause WHERE pour filtrer les non-changements qui pourraient résulter de la mise à jour d'autres colonnes.

J'ai également ajouté la gestion des erreurs et la journalisation lorsque nous avons remarqué des cas limites avec les prix de NULL.

Conseils pour préparer un entretien avec MySQL

Si vous débutez votre carrière, voici quelques conseils qui vous aideront à réussir votre prochain entretien :

Maîtriser les concepts de base de MySQL : Learn les fondamentaux de la base de données comme l'indexationg, les transactions et l'optimiseur de requêtes. Comprendre comment MySQL traite les requêtes et gère le stockage des données. Cela vous aidera à rédiger des requêtes efficaces et à expliquer vos solutions lors de l'entretien.

Acquérir une expérience pratique : Installez MySQL sur votre ordinateur et pratiqueze régulièrement. Créez des bases de données de test, écrivez différents types de requêtes et essayez de les optimiser. La pratique réelle est le meilleur moyen d'apprendre comment les choses fonctionnent et d'acquérir de l'assurance pour l'entretien.

Pour approfondir vos connaissances, consultez les ressources de DataCamp : 

Découvrez les outils et les intégrations MySQL : Familiarisez-vous avec MySQL Workbench ou d'autres outils de gestion de bases de données et de surveillance de base. Yoous pouvez également explorer le fonctionnement de MySQL avec Python et les frameworks pertinents, montrant ainsi que vous pouvez travailler dans un véritable environnement de développement.

Conclusion

Voilà, c'est fait ! J'ai couvert les 34 meilleures questions d'entretien MySQL pour vous aider à décrocher votre prochain emploi. Que vous postuliez à un poste de débutant ou à un poste d'administrateur de données avancé, vous devez maîtriser les principes fondamentaux de MySQL, l'optimisation des requêtes et la gestion des bases de données pour vous démarquer. 

Pour approfondir vos connaissances sur d'autres systèmes de gestion de base de données, consultez les cours de SQL de les cours SQL de DataCamp.

Devenez certifié SQL

Prouvez que vos compétences en SQL sont prêtes à l'emploi grâce à une certification.

Laiba Siddiqui's photo
Author
Laiba Siddiqui
LinkedIn
Twitter

Je suis un stratège du contenu qui aime simplifier les sujets complexes. J'ai aidé des entreprises comme Splunk, Hackernoon et Tiiny Host à créer un contenu attrayant et informatif pour leur public.

Sujets

Apprenez-en plus sur SQL avec ces cours !

Certification disponible

cours

SQL intermédiaire

4 hr
294.7K
Accompagné à chaque étape de requêtes pratiques, ce cours vous enseigne tout ce que vous devez savoir pour analyser des données en utilisant votre propre code SQL dès aujourd'hui !
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow