Maison > base de données > tutoriel mysql > Comment utiliser les procédures stockées dans MySQL

Comment utiliser les procédures stockées dans MySQL

Lisa Kudrow
Libérer: 2025-01-15 11:41:26
avant
883 Les gens l'ont consulté

En général, lorsque vous travaillez avec une base de données relationnelle, vous émettez des requêtes individuelles en langage de requête structuré (SQL) pour récupérer ou manipuler des données, comme SELECT, INSERT, UPDATE ou DELETE, directement à partir du code de votre application. Ces déclarations fonctionnent sur et manipuler directement les tables de la base de données sous-jacente. Si le même les instructions ou les groupes d'instructions sont utilisés dans plusieurs applications accédant à la même base de données, ils sont souvent dupliqués dans des applications.

MySQL, similaire à de nombreux autres systèmes de gestion de bases de données relationnelles, prend en charge l’utilisation de procédures stockées. Les procédures stockées aident le groupe un ou plusieurs instructions SQL à réutiliser sous un nom commun, encapsulant logique métier commune au sein de la base de données elle-même. Une telle procédure peut être appelé depuis l'application qui accède à la base de données pour récupérer ou manipuler les données de manière cohérente.

À l'aide de procédures stockées, vous pouvez créer des routines réutilisables pour des tâches courantes. tâches à utiliser dans plusieurs applications, assurer la validation des données, ou fournir une couche supplémentaire de sécurité d'accès aux données en limitant les utilisateurs de la base de données d'accéder directement aux tables sous-jacentes et d'émettre requêtes arbitraires.

Dans ce tutoriel, vous apprendrez ce que sont les procédures stockées et comment créer des procédures stockées de base qui renvoient des données et utilisent à la fois les entrées et paramètres de sortie.

截屏2025-01-15 11.29.41.png

Connexion à MySQL et configuration d'un exemple de base de données

Dans cette section, vous vous connecterez à un serveur MySQL et créerez un exemple de base de données afin que vous puissiez suivre les exemples de ce guide.

Pour ce guide, vous utiliserez une collection de voitures imaginaires. Vous stockerez des détails sur les voitures actuellement possédées, avec leur marque, leur modèle, leur année de construction, et la valeur.

Si votre système de base de données SQL s'exécute sur un serveur distant, connectez-vous en SSH à votre serveur depuis votre ordinateur local :

ssh sammy@your_server_ip
Copier après la connexion

Ensuite, ouvrez le serveur MySQL invite, en remplaçantsammypar le nom de votre utilisateur MySQL compte :

mysql -u sammy-p
Copier après la connexion

Créez une base de données nomméeprocédures :

CREATE DATABASEprocedures;
Copier après la connexion

Si la base de données a été créée avec succès , vous recevrez un résultat comme celui-ci :

OutputQuery OK, 1 row affected (0.01 sec)
Copier après la connexion

Pour sélectionner la base de données de procédures, exécutez la commande USE suivante déclaration :

USEprocedures;
Copier après la connexion

Vous recevrez le résultat suivant :

OutputDatabase changed
Copier après la connexion

Après avoir sélectionné la base de données, vous pouvez y créer des exemples de tables. Les voitures de table contiendront des données simplifiées sur les voitures dans la base de données. Il contiendra les colonnes suivantes :

  • make : cette colonne contient la marque de chaque voiture possédée, exprimée à l'aide du type de données varchar avec un maximum de 100 caractères.
  • model : ce La colonne contient le nom du modèle de voiture, exprimé à l'aide du type de données varchar avec un maximum de 100 caractères.
  • année : cette colonne stocke l'année de construction de la voiture avec Type de données int pour contenir des valeurs numériques.
  • valeur : cette colonne stocke la valeur de la voiture en utilisant le type de données décimal avec un maximum de 10 chiffres et 2 chiffres après la virgule décimale.

Créez l'exemple de table avec la commande suivante :

CREATE TABLE cars (    make varchar(100),    model varchar(100),    year int,    value decimal(10, 2));
Copier après la connexion

Si la sortie suivante s'imprime, la table a été créée :

OutputQuery OK, 0 rows affected (0.00 sec)
Copier après la connexion

Ensuite, chargez la table cars avec quelques exemples de données en exécutant l'opération INSERT INTO suivante :

INSERT INTO carsVALUES('Porsche', '911 GT3', 2020, 169700),('Porsche', 'Cayman GT4', 2018, 118000),('Porsche', 'Panamera', 2022, 113200),('Porsche', 'Macan', 2019, 27400),('Porsche', '718 Boxster', 2017, 48880),('Ferrari', '488 GTB', 2015, 254750),('Ferrari', 'F8 Tributo', 2019, 375000),('Ferrari', 'SF90 Stradale', 2020, 627000),('Ferrari', '812 Superfast', 2017, 335300),('Ferrari', 'GTC4Lusso', 2016, 268000);
Copier après la connexion

Le INSÉRER DANS l'opération ajoutera dix échantillons de voitures de sport à la table, dont cinq Porsche et cinq modèles Ferrari. La sortie suivante indique que tous cinq lignes ont été ajoutées :

OutputQuery OK, 10 rows affected (0.00 sec)
Records: 10  Duplicates: 0  Warnings: 0
Copier après la connexion

Avec cela, vous êtes prêt à suivre le reste du guide et à commencer à utiliser les procédures stockées dans SQL.

Introduction aux procédures stockées

Procédures stockées dans MySQL et dans de nombreuses autres bases de données relationnelles les systèmes sont des objets nommés qui contiennent une ou plusieurs instructions présentées puis exécuté par la base de données dans une séquence lorsqu'il est appelé. Dans le exemple le plus basique, une procédure stockée peut enregistrer une instruction commune sous une routine réutilisable, telle que la récupération de données de la base de données avec filtres souvent utilisés. Par exemple, vous pouvez créer une procédure stockée pour récupérer les clients de la boutique en ligne qui ont passé des commandes au cours de la dernière période donnée nombre de mois. Dans les scénarios les plus complexes, les procédures stockées peuvent représentent des programmes détaillés décrivant une logique métier complexe pour applications robustes.

L'ensemble d'instructions dans une procédure stockée peut inclure des instructions SQL courantes, telles que des requêtes SELECT ou INSERT, qui renvoient ou manipulent des données. De plus, les procédures stockées peuvent utiliser :

  • Paramètres transmis à la procédure stockée ou renvoyés via celle-ci.
  • Variables déclarées pour traiter les données récupérées directement dans le code de la procédure.
  • Instructions conditionnelles, qui permettent l'exécution de parties du code de procédure stockée en fonction de certaines conditions, telles que les instructions IF ou CASE.
  • Les boucles, telles que WHILE, LOOP et REPEAT, permettent d'exécuter des parties du code plusieurs fois, par exemple pour chaque ligne d'une donnée récupérée. set.
  • Instructions de gestion des erreurs, telles que le renvoi de messages d'erreur aux utilisateurs de la base de données accédant à la procédure.
  • Appels à d'autres procédures stockées dans la base de données.

Lorsque la procédure est appelée par son nom, le moteur de base de données l'exécute comme défini, instruction par instruction.

L'utilisateur de la base de données doit disposer des autorisations appropriées pour exécuter la procédure donnée. Cette exigence d'autorisations fournit une couche de sécurité, interdisant l'accès direct à la base de données tout en donnant l'accès aux utilisateurs à des procédures individuelles dont l'exécution est garantie en toute sécurité.

Les procédures stockées sont exécutées directement sur le serveur de base de données, effectuer tous les calculs localement et renvoyer les résultats à l'appelant utilisateur uniquement une fois terminé.

Si vous souhaitez modifier le comportement de la procédure, vous pouvez mettre à jour le procédure dans la base de données, et les applications qui l'utilisent le feront récupère automatiquement la nouvelle version. Tous les utilisateurs commenceront immédiatement en utilisant le nouveau code de procédure sans avoir à ajuster leur applications.

Voici la structure générale du code SQL utilisé pour créer une procédure stockée :

DELIMITER //CREATE PROCEDURE procedure_name(parameter_1, parameter_2, . . ., parameter_n)BEGIN    instruction_1;    instruction_2;    . . .    instruction_n;END //DELIMITER ;
Copier après la connexion

La première et la dernière instructions de ce fragment de code sont DELIMITER // et DELIMITER ;. Habituellement, MySQL utilise le symbole point-virgule (;) pour délimiter les instructions et indiquer quand elles commencent et se terminent. Si tu exécuter plusieurs instructions dans la console MySQL séparées par points-virgules, ils seront traités comme des commandes distinctes et exécutés indépendamment, l'un après l'autre. Cependant, la procédure stockée peut entourer plusieurs commandes qui seront exécutées séquentiellement lorsqu'il est appelé. Cela pose une difficulté lorsque l'on essaie de dire à MySQL de créer une nouvelle procédure. Le moteur de base de données rencontrerait le signe point-virgule dans le corps de la procédure stockée et pense qu'il devrait arrêter d'exécuter le déclaration. Dans cette situation, la déclaration voulue est l'ensemble code de création de procédure, pas une seule instruction dans la procédure lui-même, donc MySQL interpréterait mal vos intentions.

Pour contourner cette limitation, vous utilisez la commande DELIMITER pour modifier temporairement le délimiteur de ; à // pendant la durée de la CREATE PROCEDURE appel. Ensuite, tous les points-virgules à l'intérieur du corps de la procédure stockée seront transmis au serveur tel quel. Une fois toute la procédure terminée, le le délimiteur est remplacé par ; avec le dernier DELIMITER ;.

Le cœur du code pour créer une nouvelle procédure est l'appel CREATE PROCEDURE suivi du nom de la procédure : nom_procédure dans l'exemple. Le nom de la procédure est suivi d'une liste facultative de paramètres que la procédure acceptera. La dernière partie est la procédure corps, entouré des instructions BEGIN et END. À l'intérieur se trouve le code de la procédure, qui peut contenir une seule instruction SQL telle qu'une requête SELECT ou un code plus complexe.

La commande END se termine par //, un délimiteur temporaire, au lieu d'un point-virgule typique.

Dans la section suivante, vous allez créer une procédure stockée de base sans paramètres entourant une seule requête.

Création d'une procédure stockée sans Paramètres

Dans cette section, vous allez créer votre première procédure stockée encapsulant une seule instruction SQL SELECT pour renvoyer la liste des voitures possédées classées par marque et valeur par ordre décroissant.

Commencez par en exécutant l'instruction SELECT que vous allez utiliser :

SELECT * FROM cars ORDER BY make, value DESC;
Copier après la connexion

La base de données renverra la liste des voitures des voitures tableau, d'abord classé par marque puis, au sein d'une même marque, par valeur par ordre décroissant :

Output --------- --------------- ------ ----------- 
| make    | model         | year | value     |
 --------- --------------- ------ ----------- 
| Ferrari | SF90 Stradale | 2020 | 627000.00 |
| Ferrari | F8 Tributo    | 2019 | 375000.00 |
| Ferrari | 812 Superfast | 2017 | 335300.00 |
| Ferrari | GTC4Lusso     | 2016 | 268000.00 |
| Ferrari | 488 GTB       | 2015 | 254750.00 |
| Porsche | 911 GT3       | 2020 | 169700.00 |
| Porsche | Cayman GT4    | 2018 | 118000.00 |
| Porsche | Panamera      | 2022 | 113200.00 |
| Porsche | 718 Boxster   | 2017 |  48880.00 |
| Porsche | Macan         | 2019 |  27400.00 |
 --------- --------------- ------ ----------- 
10 rows in set (0.00 sec)
Copier après la connexion

La Ferrari la plus précieuse est en tête de liste, et la Porsche la moins précieuse apparaît en bas .

Supposons que cette requête soit fréquemment utilisée dans plusieurs applications ou par plusieurs utilisateurs et supposez que vous voulez vous assurer que tout le monde utilisera le exactement la même manière d’ordonner les résultats. Pour ce faire, vous souhaitez créer un procédure stockée qui enregistrera cette instruction sous un nom réutilisable procédure.

Pour créer cette procédure stockée, exécutez le fragment de code suivant :

DELIMITER //CREATE PROCEDUREget_all_cars()BEGIN    SELECT * FROM cars ORDER BY make, value DESC;END //DELIMITER ;
Copier après la connexion

Comme décrit dans la section précédente, la première et la dernière commandes (DELIMITER / / et DELIMITER ;) disent à MySQL d'arrêter de traiter le caractère point-virgule comme délimiteur d'instruction pendant la durée de création de la procédure.

Le CREATE La commande PROCEDURE SQL est suivie du nom de la procédureget_all_cars, que vous pouvez définir pour décrire au mieux ce que fait la procédure. Après le nom de la procédure, il y a une paire de parenthèses () où vous pouvez ajouter des paramètres. Dans cet exemple, la procédure ne utilisez des paramètres, donc les parenthèses sont vides. Ensuite, entre les commandes BEGIN et END définissant le début et la fin du bloc de code de procédure, l'instruction SELECT précédemment utilisée est écrite textuellement.

La base de données répondra avec un message de réussite :

OutputQuery OK, 0 rows affected (0.02 sec)
Copier après la connexion

La procédureget_all_carsest maintenant enregistrée dans la base de données, et lorsqu'elle est appelée, elle exécutera l'instruction enregistrée comme is.

Pour exécuter des procédures stockées enregistrées, vous pouvez utiliser la commande CALL SQL suivie du nom de la procédure. Essayez d'exécuter la procédure nouvellement créée comme ceci :

CALLget_all_cars;
Copier après la connexion

Le nom de la procédure,get_all_cars, est tout ce dont vous avez besoin pour utiliser la procédure. Vous n'avez plus besoin de saisir manuellement une partie de l'instruction SELECT que vous avez utilisée précédemment. La base de données affichera les résultats tout comme le résultat de l'instruction SELECT exécutée auparavant :

Output --------- --------------- ------ ----------- 
| make    | model         | year | value     |
 --------- --------------- ------ ----------- 
| Ferrari | SF90 Stradale | 2020 | 627000.00 |
| Ferrari | F8 Tributo    | 2019 | 375000.00 |
| Ferrari | 812 Superfast | 2017 | 335300.00 |
| Ferrari | GTC4Lusso     | 2016 | 268000.00 |
| Ferrari | 488 GTB       | 2015 | 254750.00 |
| Porsche | 911 GT3       | 2020 | 169700.00 |
| Porsche | Cayman GT4    | 2018 | 118000.00 |
| Porsche | Panamera      | 2022 | 113200.00 |
| Porsche | 718 Boxster   | 2017 |  48880.00 |
| Porsche | Macan         | 2019 |  27400.00 |
 --------- --------------- ------ ----------- 
10 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
Copier après la connexion

Vous avez maintenant créé avec succès une procédure stockée sans aucun paramètre qui renvoie toutes les voitures de la table des voitures classées d'une manière particulière. . Vous pouvez utiliser la procédure dans plusieurs applications.

Dans la section suivante, vous créerez une procédure qui accepte paramètres pour modifier le comportement de la procédure en fonction de la saisie de l'utilisateur.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:digitalocean.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal