Fonctions MySQL et Logique Personnalisée

MySQLBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à créer et à utiliser des fonctions personnalisées dans MySQL. Ce laboratoire se concentre sur l'encapsulation de la logique réutilisable au sein de votre base de données en créant une fonction pour calculer l'aire d'un rectangle.

Les étapes comprennent la connexion au serveur MySQL, la création d'une base de données (si nécessaire), la définition de la fonction calculate_rectangle_area avec des paramètres d'entrée pour la longueur et la largeur, et la spécification du type de données de retour. Le corps de la fonction calcule l'aire et renvoie le résultat. Les étapes suivantes couvriront l'utilisation de cette fonction dans une requête SELECT, le test de sa sortie avec des données d'exemple, et enfin, la suppression de la fonction.

Se Connecter à MySQL et Créer une Base de Données

Dans cette étape, vous allez vous connecter au serveur MySQL et créer une base de données où vous créerez et utiliserez votre fonction personnalisée.

Tout d'abord, ouvrez votre terminal et connectez-vous au serveur MySQL en tant qu'utilisateur root. Exécutez la commande suivante une seule fois au début du laboratoire :

sudo mysql -u root

Cette commande utilise sudo pour exécuter le client mysql en tant qu'utilisateur root. Comme l'utilisateur root dans cet environnement n'a pas de mot de passe défini, vous serez connecté directement au shell MySQL. Vous verrez l'invite mysql>.

Restez dans le shell MySQL pour toutes les étapes suivantes. Ne quittez pas avant la fin du laboratoire.

Maintenant, créons une base de données nommée my_functions_db. Cette base de données sera utilisée pour stocker notre table et notre fonction. Exécutez la commande SQL suivante à l'invite mysql> :

CREATE DATABASE IF NOT EXISTS my_functions_db;

Après avoir créé la base de données, sélectionnez-la pour en faire la base de données par défaut pour les opérations ultérieures :

USE my_functions_db;

Vous devriez voir un message indiquant que la base de données a été modifiée.

Vous êtes maintenant connecté à la base de données my_functions_db et prêt à créer votre fonction personnalisée à l'étape suivante.

Créer une Fonction pour Calculer l'Aire d'un Rectangle

Dans cette étape, vous allez créer une fonction personnalisée dans MySQL pour calculer l'aire d'un rectangle. Cette fonction prendra la longueur et la largeur en entrée et retournera l'aire calculée.

Assurez-vous d'être toujours dans le shell MySQL et d'avoir déjà sélectionné la base de données my_functions_db comme décrit dans l'étape précédente.

Maintenant, créons la fonction nommée calculate_rectangle_area. Cette fonction acceptera deux paramètres entiers, length et width, et retournera un entier représentant l'aire.

Exécutez la commande SQL suivante dans le shell MySQL :

DELIMITER //

CREATE FUNCTION calculate_rectangle_area (length INT, width INT)
RETURNS INT
DETERMINISTIC
BEGIN
  DECLARE area INT;
  SET area = length * width;
  RETURN area;
END //

DELIMITER ;

Analysons cette commande :

  • DELIMITER // : Ceci change le délimiteur d'instruction du point-virgule (;) par défaut en //. Ceci est nécessaire car la définition de la fonction contient des points-virgules dans son corps.
  • CREATE FUNCTION calculate_rectangle_area (length INT, width INT) : Ceci définit le nom de la fonction (calculate_rectangle_area) et ses paramètres d'entrée (length et width, tous deux de type INT).
  • RETURNS INT : Ceci spécifie que la fonction retournera une valeur entière.
  • DETERMINISTIC : Ce mot-clé indique que la fonction produira toujours le même résultat pour les mêmes valeurs d'entrée. Cela aide MySQL à optimiser les requêtes qui utilisent la fonction.
  • BEGIN ... END : Ce bloc contient la logique de la fonction.
  • DECLARE area INT; : Ceci déclare une variable locale nommée area de type INT dans la fonction.
  • SET area = length * width; : Ceci calcule l'aire en multipliant les paramètres length et width et assigne le résultat à la variable area.
  • RETURN area; : Ceci retourne la valeur stockée dans la variable area comme sortie de la fonction.
  • END // : Ceci marque la fin de la définition de la fonction, en utilisant le délimiteur temporaire //.
  • DELIMITER ; : Ceci rétablit le délimiteur par défaut, le point-virgule (;).

Après avoir exécuté cette commande, la fonction calculate_rectangle_area sera créée dans la base de données my_functions_db.

Pour vérifier que la fonction a été créée avec succès, vous pouvez lister les fonctions de la base de données actuelle :

SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';

Cette commande affichera des informations sur la fonction, confirmant son existence.

Utiliser la Fonction dans une Requête SELECT

Maintenant que vous avez créé la fonction calculate_rectangle_area, vous pouvez l'utiliser dans une requête SELECT pour calculer l'aire de rectangles basés sur les données stockées dans une table.

Continuez à travailler dans la même session du shell MySQL et assurez-vous d'utiliser toujours la base de données my_functions_db.

Tout d'abord, créons une table nommée rectangles pour stocker les dimensions de différents rectangles. Exécutez la commande SQL suivante :

CREATE TABLE IF NOT EXISTS rectangles (
  id INT AUTO_INCREMENT PRIMARY KEY,
  length INT,
  width INT
);

Cette commande crée une table avec un id auto-incrémenté comme clé primaire, et des colonnes pour length et width.

Ensuite, insérons quelques données d'exemple dans la table rectangles :

INSERT INTO rectangles (length, width) VALUES (5, 10);
INSERT INTO rectangles (length, width) VALUES (7, 8);
INSERT INTO rectangles (length, width) VALUES (12, 3);

Ces commandes ajoutent trois lignes à la table rectangles avec différentes valeurs de longueur et de largeur.

Maintenant, vous pouvez utiliser la fonction calculate_rectangle_area dans une requête SELECT pour récupérer les dimensions des rectangles et leurs aires calculées. Exécutez la commande SQL suivante :

SELECT id, length, width, calculate_rectangle_area(length, width) AS area FROM rectangles;

Dans cette requête :

  • SELECT id, length, width : Ceci sélectionne les colonnes id, length et width de la table rectangles.
  • calculate_rectangle_area(length, width) : Ceci appelle la fonction calculate_rectangle_area, en passant les valeurs des colonnes length et width de chaque ligne comme arguments.
  • AS area : Ceci assigne un alias area au résultat retourné par la fonction, rendant la colonne de sortie plus lisible.
  • FROM rectangles : Ceci spécifie que les données doivent être récupérées de la table rectangles.

Le résultat de cette requête affichera l'id, la length, la width et l'area calculée pour chaque rectangle dans la table. Vous devriez voir un résultat similaire à ceci :

+----+--------+-------+------+
| id | length | width | area |
+----+--------+-------+------+
|  1 |      5 |    10 |   50 |
|  2 |      7 |     8 |   56 |
|  3 |     12 |     3 |   36 |
+----+--------+-------+------+

Ceci démontre comment utiliser efficacement votre fonction personnalisée dans une requête SQL standard pour effectuer des calculs sur vos données.

Tester la Sortie de la Fonction avec des Données d'Exemple

Dans cette étape, vous allez tester davantage la fonction calculate_rectangle_area en insérant plus de données d'exemple dans la table rectangles et en vérifiant les aires calculées. Cela permet de s'assurer que la fonction fonctionne correctement avec différentes valeurs d'entrée.

Continuez à travailler dans la même session du shell MySQL et assurez-vous d'utiliser toujours la base de données my_functions_db.

Maintenant, insérez des lignes supplémentaires dans la table rectangles avec différentes valeurs de longueur et de largeur :

INSERT INTO rectangles (length, width) VALUES (10, 10);
INSERT INTO rectangles (length, width) VALUES (2, 5);
INSERT INTO rectangles (length, width) VALUES (15, 4);

Ces commandes ajoutent trois lignes supplémentaires à la table rectangles.

Maintenant, exécutez à nouveau la requête SELECT pour voir les aires calculées pour tous les rectangles, y compris ceux nouvellement ajoutés :

SELECT id, length, width, calculate_rectangle_area(length, width) AS area FROM rectangles;

La sortie inclura maintenant les aires des nouveaux rectangles :

+----+--------+-------+------+
| id | length | width | area |
+----+--------+-------+------+
|  1 |      5 |    10 |   50 |
|  2 |      7 |     8 |   56 |
|  3 |     12 |     3 |   36 |
|  4 |     10 |    10 |  100 |
|  5 |      2 |     5 |   10 |
|  6 |     15 |     4 |   60 |
+----+--------+-------+------+

Examinez la sortie et confirmez que les aires calculées pour les nouvelles lignes sont correctes :

  • Pour une longueur de 10 et une largeur de 10, l'aire est de 100 (10 * 10).
  • Pour une longueur de 2 et une largeur de 5, l'aire est de 10 (2 * 5).
  • Pour une longueur de 15 et une largeur de 4, l'aire est de 60 (15 * 4).

Cette étape renforce votre compréhension de l'utilisation de la fonction avec des données variables et confirme son exactitude.

Supprimer la Fonction et la Table

Dans cette dernière étape, vous allez nettoyer la base de données en supprimant la fonction calculate_rectangle_area et la table rectangles. C'est une bonne pratique de supprimer les objets dont vous n'avez plus besoin.

Continuez à travailler dans la même session du shell MySQL et assurez-vous d'utiliser toujours la base de données my_functions_db.

Tout d'abord, supprimons la fonction calculate_rectangle_area. Exécutez la commande SQL suivante :

DROP FUNCTION IF EXISTS calculate_rectangle_area;
  • DROP FUNCTION : Cette commande est utilisée pour supprimer une fonction.
  • IF EXISTS : Cette clause empêche une erreur si la fonction n'existe pas.

Ensuite, supprimons la table rectangles. Exécutez la commande SQL suivante :

DROP TABLE IF EXISTS rectangles;
  • DROP TABLE : Cette commande est utilisée pour supprimer une table.
  • IF EXISTS : Cette clause empêche une erreur si la table n'existe pas.

Après avoir exécuté ces commandes, la fonction et la table seront supprimées de la base de données my_functions_db.

Pour vérifier que la fonction a été supprimée, vous pouvez essayer de lister à nouveau les fonctions :

SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';

Cette commande devrait maintenant retourner un ensemble de résultats vide, indiquant que la fonction a disparu.

Pour vérifier que la table a été supprimée, vous pouvez essayer d'en sélectionner les données :

SELECT * FROM rectangles;

Cette commande devrait retourner une erreur similaire à ERROR 1146 (42S02): Table 'my_functions_db.rectangles' doesn't exist, indiquant que la table a disparu.

Vous pouvez maintenant quitter le shell MySQL en tapant exit et en appuyant sur Entrée.

Vous avez créé, utilisé, testé et supprimé avec succès une fonction personnalisée et une table dans MySQL.

Résumé

Dans ce laboratoire, vous avez appris à créer une fonction dans MySQL pour encapsuler une logique réutilisable. Le processus comprenait la connexion au serveur MySQL, la création d'une base de données (si nécessaire), puis la définition d'une fonction avec des paramètres d'entrée, un type de données de retour et le mot-clé DETERMINISTIC.

Plus spécifiquement, vous avez créé la fonction calculate_rectangle_area, qui prend la longueur et la largeur d'un rectangle en entrée et retourne son aire. Le corps de la fonction incluait la déclaration d'une variable locale pour stocker l'aire calculée et l'utilisation de l'instruction RETURN pour renvoyer le résultat.

Vous avez ensuite appris à utiliser cette fonction dans une requête SELECT pour effectuer des calculs sur les données stockées dans une table. Vous avez également testé la fonction avec des données d'exemple supplémentaires pour garantir son exactitude. Enfin, vous avez appris à supprimer la fonction et la table pour nettoyer votre environnement de base de données.

Ce laboratoire a fourni une introduction pratique à la création et à l'utilisation de fonctions personnalisées dans MySQL, une compétence précieuse pour encapsuler la logique et améliorer l'efficacité de vos opérations de base de données.