Maison > base de données > tutoriel mysql > le corps du texte

procédure stockée mysql c

PHPz
Libérer: 2023-05-14 13:24:07
original
1081 Les gens l'ont consulté

MySQL est un système de gestion de bases de données relationnelles très couramment utilisé, qui peut être utilisé pour stocker, traiter et gérer de grandes quantités de données. Les procédures stockées sont une fonction très utile fournie par MySQL. Elles peuvent encapsuler une série d'instructions SQL dans un bloc de code réutilisable, améliorant ainsi l'efficacité d'exécution des instructions SQL, réduisant la complexité du code, améliorant la sécurité, etc. Par conséquent, maîtriser l’utilisation des procédures stockées MySQL est d’une grande importance pour améliorer l’efficacité du développement et de la gestion des bases de données.

1. Introduction aux procédures stockées

Les procédures stockées sont un ensemble d'instructions SQL précompilées définies dans MySQL. Elles sont compilées dans le serveur de base de données et ne doivent être appelées que lors d'une requête. Enregistrez simplement la procédure. Par rapport à l'exécution seule d'instructions SQL, les procédures stockées peuvent réduire considérablement la surcharge du réseau et améliorer l'efficacité de l'interrogation et du traitement des données.

De plus, les procédures stockées présentent les caractéristiques importantes suivantes :

  1. Sécurité : les droits d'accès des utilisateurs à la base de données et l'accès aux données peuvent être contrôlés via des procédures stockées. .
  2. Logique : les procédures stockées peuvent effectuer des opérations de données complexes, telles que des calculs, des boucles, des jugements, etc.
  3. Maintenabilité : les procédures stockées peuvent augmenter la réutilisation du code et réduire la quantité de code, facilitant ainsi la maintenance et les mises à jour de la base de données.

2. Format syntaxique de la procédure stockée

Pour définir une procédure stockée dans MySQL, vous devez utiliser l'instruction CREATE PROCEDURE. Voici le format de syntaxe de base de l'instruction CREATE PROCEDURE :

CREATE PROCEDURE 存储过程名称(参数列表)
BEGIN
    -- sql语句
END;
Copier après la connexion

Parmi eux, le nom de la procédure stockée est requis et la liste des paramètres peut être omise si nécessaire. Entre BEGIN et END, vous pouvez écrire une série d'instructions SQL pour effectuer des requêtes, des écritures, des modifications et d'autres opérations connexes.

Ce qui suit est un exemple simple de procédure stockée. La procédure stockée n'a qu'un seul paramètre, elle le modifie simplement et renvoie :

CREATE PROCEDURE test_proc(IN num INT)
BEGIN
    SET num = num + 1;
    SELECT num;
END;
Copier après la connexion

Lors de l'exécution de la procédure stockée, vous pouvez Appelé. via l'instruction CALL :

CALL test_proc(10);
Copier après la connexion

Le résultat de l'exécution est 11.

3. Paramètres dans les procédures stockées

Dans les procédures stockées, vous pouvez utiliser trois types de paramètres : IN, OUT et INOUT.

  1. IN paramètre : représente la valeur du paramètre passée dans la procédure stockée, qui peut être lue et modifiée dans la procédure stockée.
  2. OUT paramètre : représente la valeur du paramètre sortie dans la procédure stockée, qui peut renvoyer un ou plusieurs résultats.
  3. INOUT paramètres : indique les valeurs des paramètres d'entrée et de sortie​​dans le processus stocké, c'est-à-dire qu'il peut être utilisé soit comme paramètre d'entrée, soit comme paramètre de sortie.

Ce qui suit est un exemple de procédure stockée avec des paramètres :

CREATE PROCEDURE get_user_by_id(IN userid INT, OUT username VARCHAR(50))
BEGIN
    SELECT username FROM user WHERE id=userid;
    SET username = CONCAT('Welcome, ', username);
END;
Copier après la connexion

Lors de l'appel de cette procédure stockée, vous devez transmettre le paramètre userid et définir un variable pour recevoir les paramètres de sortie du nom d'utilisateur :

DECLARE uname VARCHAR(50);
CALL get_user_by_id(1, @uname);
SELECT @uname;
Copier après la connexion

4. Contrôle de processus et boucles dans les procédures stockées

En plus d'exécuter directement des instructions SQL, les procédures stockées peuvent également utiliser des instructions de contrôle de flux et instructions de boucle pour effectuer des opérations logiques spécifiques. MySQL prend en charge les instructions de contrôle de flux suivantes :

  1. IF, ELSEIF et ELSE : utilisées pour implémenter des branches conditionnelles.
  2. CASE, WHEN et ELSE : utilisés pour implémenter plusieurs branches conditionnelles.
  3. LOOP et END LOOP : utilisés pour implémenter des boucles simples.
  4. WHILE DO et END WHILE : utilisés pour implémenter des boucles complexes.

Ce qui suit est un exemple de boucle WHILE DO Cette procédure stockée ajoute 1 an à l'âge dans la table utilisateur :

CREATE PROCEDURE update_user_age()
BEGIN
    DECLARE i INT DEFAULT 0;
    DECLARE n INT;
    SELECT COUNT(*) FROM user INTO n;
    WHILE i<=n DO
        UPDATE user SET age=age+1 WHERE id=i;
        SET i=i+1;
    END WHILE;
END;
Copier après la connexion

Lors de l'exécution de cette procédure stockée. procédure, appelez simplement :

CALL update_user_age();
Copier après la connexion

5. Gestion des exceptions dans les procédures stockées

Lorsqu'une erreur se produit dans une procédure stockée, la gestion des exceptions peut être utilisée pour éviter les plantages du programme. Dans MySQL, la gestion des exceptions est implémentée à l'aide de la syntaxe DECLARE ... HANDLER.

Ce qui suit est un exemple de gestion des exceptions lors de la suppression d'un enregistrement de table utilisateur, la procédure stockée lèvera une exception si l'enregistrement a été référencé par d'autres tables.

CREATE PROCEDURE delete_user(IN userid INT)
BEGIN
    DECLARE exit_test CONDITION FOR SQLSTATE '23000';
    START TRANSACTION;
    DELETE FROM user WHERE id=userid;
    IF ROW_COUNT() = 0 THEN
        SIGNAL exit_test;
    END IF;
    COMMIT;
END;
Copier après la connexion

Si une exception se produit lors de l'exécution de la procédure stockée, vous pouvez écrire le code de programme suivant pour la gérer :

DECLARE EXIT HANDLER FOR SQLSTATE '23000'
    -- 处理异常
END;    
Copier après la connexion

6. 🎜🎜#Bien que les procédures stockées puissent améliorer l'efficacité des requêtes SQL, si les procédures stockées ne sont pas conçues de manière raisonnable, cela peut également entraîner une diminution de l'efficacité des requêtes. Voici quelques suggestions d'optimisation pour les procédures stockées :

Évitez d'utiliser trop de variables temporaires et d'instructions de boucle, ce qui réduirait considérablement l'efficacité d'exécution des procédures stockées.
  1. Lors de l'utilisation d'instructions de contrôle de flux, RETURN doit être utilisé à la place de SELECT.
  2. L'utilisation des instructions Prepared Statement dans les procédures stockées pour l'interrogation et la mise à jour des données peut améliorer l'efficacité des requêtes.
  3. Envisagez d'utiliser des vues ou des requêtes de jointure au lieu de procédures stockées.
  4. En bref, les procédures stockées sont une fonction très importante dans MySQL. Elles peuvent améliorer l'efficacité d'exécution des instructions SQL, réduire la complexité du code, améliorer la sécurité, etc. Lorsque vous utilisez des procédures stockées, vous devez faire attention aux paramètres, au contrôle des processus, à la gestion des exceptions, etc. Vous devez également réfléchir à la manière d'améliorer l'efficacité des requêtes et des mises à jour de la base de données en optimisant les procédures stockées.

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:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal