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

A quoi servent les procédures stockées MySQL ?

青灯夜游
Libérer: 2023-04-04 15:43:07
original
2654 Les gens l'ont consulté

Les fonctions des procédures stockées MySQL : 1. Simplifiez les opérations complexes en encapsulant le traitement dans des unités faciles à utiliser ; 2. Simplifiez la gestion des modifications 3. Aidez à améliorer les performances de l'application ; 4. Aidez à réduire le trafic entre l'application et ; le serveur de base de données, car l'application n'a pas besoin d'envoyer plusieurs instructions SQL longues, mais uniquement le nom et les paramètres de la procédure stockée. 5. Il peut améliorer la fonctionnalité et la flexibilité des instructions SQL afin que MySQL puisse effectuer des jugements complexes et plus complexes ; opérations 6. Cela peut améliorer la sécurité de la base de données et l’intégrité des données, etc.

A quoi servent les procédures stockées MySQL ?

L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.

Introduction aux procédures stockées

Une procédure stockée est un ensemble d'instructions SQL conçues pour remplir une fonction spécifique. Le but de l'utilisation de procédures stockées est de pré-écrire un travail courant ou complexe avec des instructions SQL et de les stocker sous un nom spécifié. Cette procédure est compilée, optimisée et stockée dans le serveur de base de données, elle est donc appelée procédure stockée. Lorsque vous aurez besoin que la base de données fournisse le même service que la procédure stockée définie à l'avenir, il vous suffit d'appeler "CALL nom de la procédure stockée" pour la compléter automatiquement.

Les instructions SQL couramment utilisées pour faire fonctionner les bases de données doivent d'abord être compilées puis exécutées. Les procédures stockées adoptent une autre approche pour exécuter les instructions SQL.

Une procédure stockée est une fonction programmable qui est créée et enregistrée dans la base de données. Elle se compose généralement d'instructions SQL et de certaines structures de contrôle spéciales. Les procédures stockées sont particulièrement adaptées lorsque vous souhaitez exécuter la même fonction spécifique sur différentes applications ou plateformes.

La version MySQL 5.0 ne prenait pas en charge les procédures stockées auparavant, ce qui réduisait considérablement l'application de MySQL. MySQL prend en charge les procédures stockées depuis la version 5.0, ce qui améliore non seulement la vitesse de traitement de la base de données, mais améliore également la flexibilité de la programmation de la base de données. Les procédures stockées sont une fonction importante de la base de données. Les procédures stockées peuvent être utilisées pour convertir des données et migrer des données. , La création de rapports est similaire à un langage de programmation. Une fois exécuté avec succès, il peut être appelé à tout moment pour effectuer des opérations fonctionnelles spécifiées.

L'utilisation de procédures stockées peut non seulement améliorer l'efficacité de l'accès aux bases de données, mais également améliorer la sécurité de l'utilisation des bases de données.

Pour l'appelant, la procédure stockée encapsule l'instruction SQL et l'appelant n'a pas besoin de prendre en compte le processus d'implémentation spécifique de la fonction logique. Juste un simple appel, il peut être appelé à partir de langages de programmation tels que Java et C#.

Le rôle (avantages) des procédures stockées

Simplifier les opérations complexes en encapsulant les traitements dans des unités faciles à utiliser
  • Simplifier la gestion des changements; Si le nom de la table, le nom de la colonne ou la logique métier change. Seul le code de la procédure stockée doit être modifié, les personnes qui l'utilisent ne changeront pas leur propre code
  • Généralement, les procédures stockées permettent d'améliorer les performances de l'application ; Lorsque la procédure stockée créée est compilée, elle est stockée dans la base de données. Cependant, MySQL implémente les procédures stockées de manière légèrement différente. Les procédures stockées MySQL sont compilées à la demande. Après avoir compilé la procédure stockée, MySQL la place dans le cache. MySQL maintient son propre cache de procédures stockées pour chaque connexion. Si l'application utilise la procédure stockée plusieurs fois en une seule connexion, utilisez la version compilée, sinon la procédure stockée fonctionne comme une requête
  • Les procédures stockées aident à réduire le trafic entre l'application et le serveur de base de données car l'application le fait. pas besoin d'envoyer plusieurs instructions SQL longues, mais uniquement le nom et les paramètres de la procédure stockée
  • peut améliorer la fonctionnalité et la flexibilité des instructions SQL
  • Les procédures stockées peuvent être écrites avec des instructions de contrôle de flux, qui ont une forte La flexibilité peut compléter des jugements complexes et des opérations plus complexes.

    Améliorez la sécurité de la base de données et l'intégrité des données
  • Une façon d'améliorer la sécurité des procédures stockées est de les utiliser comme composants intermédiaires. Dans les procédures stockées, vous pouvez effectuer des opérations associées sur certaines tables, et alors les procédures stockées sont fournies sous forme d'interfaces. De cette façon, les programmes externes ne peuvent pas exploiter directement la table de la base de données et ne peuvent exploiter la table correspondante que via des procédures stockées. Par conséquent, la sécurité peut être améliorée dans une certaine mesure.

    Rendre les données indépendantes
  • L'indépendance des données peut obtenir l'effet de découplage, c'est-à-dire que le programme peut appeler des procédures stockées au lieu d'exécuter plusieurs instructions SQL. Dans ce cas, la procédure stockée isole les données de l'utilisateur. L'avantage est que lorsque la structure de la table de données change, il n'est pas nécessaire de modifier le programme lors de l'appel de la table. L'administrateur de la base de données n'a qu'à réécrire la procédure stockée. .

Inconvénients des procédures stockées

Si vous utilisez un grand nombre de procédures stockées, l'utilisation de la mémoire de chaque connexion utilisant ces procédures stockées augmentera considérablement. De plus, si vous abusez d'un grand nombre d'opérations logiques dans la procédure stockée, l'utilisation du processeur augmentera également, car la conception originale de la base de données MySQL se concentre sur des requêtes efficaces et n'est pas propice aux opérations logiques ;
  • La construction de procédures stockées rend plus difficile le développement de procédures stockées avec une logique métier complexe ;

  • Il est difficile de déboguer des procédures stockées ; Seuls quelques systèmes de gestion de bases de données vous permettent de déboguer des procédures stockées. Malheureusement, MySQL n'offre pas la possibilité de déboguer les procédures stockées.

  • Développer et maintenir des procédures stockées n'est pas facile ; Le développement et la maintenance de procédures stockées nécessitent souvent un ensemble de compétences spécialisées que tous les développeurs d'applications ne possèdent pas. Cela peut entraîner des problèmes lors des phases de développement et de maintenance des applications.

  • Procédures stockées dans MySQL

    Créer et appeler des procédures

    Créer des procédures stockées, le code est le suivant :

    -- 创建存储过程 
    create procedure mypro(in a int,in b int,out sum int) 
    begin 
    set sum = a+b; 
    end;
    Copier après la connexion

    Les résultats d'exécution sont les suivants

    A quoi servent les procédures stockées MySQL ?

    Cela peut aussi être utilisé dans le client Navicat" Visualisez le processus sous le nœud "Fonction", comme indiqué dans la figure ci-dessous :

    A quoi servent les procédures stockées MySQL ?

    Appelez la procédure stockée, le code est le suivant :

    call mypro(1,2,@s);-- 调用存储过程 
    select @s;-- 显示过程输出结果
    Copier après la connexion

    Résultats d'exécution

    A quoi servent les procédures stockées MySQL ?

    Analyse de la syntaxe des procédures stockées

    • créer une procédure est utilisé pour créer une procédure ; create procedure 用来创建过程;
    • mypro 用来定义过程名称;
    • (in a int,in b int,out sum int)表示过程的参数,其中 in 表示输入参数,out 表示输出参数。类似于 Java 定义方法时的形参和返回值;
    • beginend 表示过程主体的开始和结束,相当于 Java 定义方法的一对大括号;
    • call用来调用过程,@s 是用来接收过程输出参数的变量

    存储过程的参数

    MySQL 存储过程的参数用在存储过程的定义,共有三种参数类型:

    • IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量);
    • OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量);
    • INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)。

    存储过程根据参数可分为四种类别:

    1).没有参数的过程;

    2).只有输入参数的过程;

    3).只有输出参数的过程;

    4).包含输入和输出参数的过程。

    变量

    MySQL 中的存储过程类似 java 中的方法。

    既然如此,在存储过程中也同样可以使用变量。java 中的局部变量作用域是变量所在的方法,而 MySQL 中的局部变量作用域是所在的存储过程。

    变量定义

    DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
    Copier après la connexion
    • declare用于声明变量;

    • variable_name表示变量名称;

    • datatype为 MySQL 的数据类型;

    • default用于声明默认值;

    • 例如:

      declare name varchar(20) default ‘jack’。
      Copier après la connexion

    变量赋值

    SET 变量名 = 表达式值 [,variable_name = expression ...]
    Copier après la connexion

    在存储过程中使用变量,代码如下所示

    use schooldb;-- 使用 schooldb 数据库
    -- 创建过程
    create procedure mypro1()
    begin
    declare name varchar(20);
    set name = '丘处机';
    select * from studentinfo where studentname = name;
    end;
    -- 调用过程
    call mypro1();
    Copier après la connexion

    运行结果

    A quoi servent les procédures stockées MySQL ?

    流程控制语句

    if 条件语句

    IF 语句包含多个条件判断,根据结果为 TRUEFALSE执行语句,与编程语言中的 ifelse ifelse 语法类似。

    定义存储过程,输入一个整数,使用 if 语句判断是正数还是负数,代码如下所示:

    -- 创建过程
    create procedure mypro2(in num int)
    begin
    if num<p>运行结果</p><p><img src="https://img.php.cn/upload/article/000/000/024/fe178bfb1a0eb7dd09df67d79c722d95-4.png" alt="A quoi servent les procédures stockées MySQL ?"></p><h4>
    <a id="case__169"></a><strong>case 条件语句</strong>
    </h4><p><code>case</code>是另一个条件判断的语句,类似于编程语言中的 <code>choose</code>、<code>when</code>语法。MySQL 中的 <code>case</code><br><code>mypro</code> est utilisé pour définir le nom de la procédure </p><p><code>(dans a int, in b int, out sum int)</code> signifie Paramètres du processus, où <code>in</code> représente les paramètres d'entrée et <code>out</code> représente les paramètres de sortie. Semblable aux paramètres formels et aux valeurs de retour lors de la définition de méthodes en Java ; </p><p><code>begin</code> et <code>end</code> représentent le début et la fin du corps du processus, équivalent à une paire de accolades lors de la définition des méthodes en Java ;</p><p><code>call</code> est utilisé pour appeler la procédure, <code>@s</code> est la variable utilisée pour recevoir les paramètres de sortie du processus<img src="https://img.php.cn/upload/article/000/000/024/fcb90e661eadc288d2d1d57364b7978a-5.png" alt="A quoi servent les procédures stockées MySQL ?"></p><p><a id="_70"></a></p><p>Paramètres de procédure stockée </p>🎜<blockquote>🎜Les paramètres de procédure stockée MySQL sont utilisés dans la définition des procédures stockées. Il existe trois types de paramètres : 🎜</blockquote>🎜🎜<code>IN</code> Entrée. paramètres : Indique que l'appelant transmet à la procédure Valeur (la valeur entrante peut être un littéral ou une variable) ; 🎜🎜<code>OUT</code> Paramètre de sortie : indique que le processus transmet une valeur à l'appelant (peut renvoie plusieurs valeurs) (la valeur sortante ne peut être qu'une variable) ;🎜🎜<code>INOUT</code>Paramètres d'entrée et de sortie : Cela signifie que l'appelant transmet une valeur au processus, et cela signifie que le processus transmet un valeur à l’appelant (la valeur ne peut être qu’une variable). 🎜🎜🎜Les procédures stockées peuvent être divisées en quatre catégories en fonction des paramètres : 🎜🎜1) Procédures sans paramètres ; 🎜🎜2) Procédures avec uniquement des paramètres d'entrée ; 🎜🎜3). .Une procédure qui contient des paramètres d’entrée et de sortie. 🎜🎜<a id="_88">🎜🎜Variables🎜🎜🎜Les procédures stockées dans MySQL sont similaires aux méthodes de Java. 🎜🎜Dans ce cas, les variables peuvent également être utilisées dans des procédures stockées. La portée des variables locales en Java est la méthode dans laquelle se trouve la variable, tandis que la portée des variables locales en MySQL est la procédure stockée dans laquelle elle se trouve. 🎜🎜</a><a id="_94">🎜🎜Définition de variable🎜🎜<pre class="brush:php;toolbar:false">-- 创建过程
    create procedure mypro3(in num int)
    begin
    case -- 条件开始
    when num🎜🎜🎜<code>declare</code> est utilisé pour déclarer des variables 🎜🎜🎜🎜<code>variable_name</code> représente le nom de la variable ; 🎜 🎜🎜🎜<code>datatype</code> est le type de données de MySQL ; 🎜🎜🎜🎜<code>default</code> est utilisé pour déclarer les valeurs par défaut ; 🎜🎜🎜🎜Par exemple : 🎜<pre class="brush:php;toolbar:false">-- 创建过程
    create procedure mypro4(in num int)
    begin
    case num -- 条件开始
    when 1 then select '数值是 1';
    when 2 then select '数值是 2';
    else select '不是 1 也不是 2';
    end case; -- 条件结束
    end;
    -- 调用过程
    call mypro4(3);
    Copier après la connexion
    🎜🎜 🎜🎜🎜Affectation de variables🎜🎜
    -- 创建过程
    create procedure mypro5(out sum int)
    begin
    declare num int default 0;
    set sum = 0;
    while num🎜Utilisez des variables dans la procédure stockée, le code est le suivant🎜<pre class="brush:php;toolbar:false">-- 创建过程
    create procedure mypro6(out sum int)
    begin
    declare num int default 0;
    set sum = 0;
    repeat-- 循环开始
    set num = num+1;
    set sum = sum+num;
    until num>=10
    end repeat; -- 循环结束
    end;
    -- 调用过程
    call mypro6(@sum);
    -- 查询变量值
    select @sum;
    Copier après la connexion
    🎜Exécuter les résultats🎜🎜A quoi servent les procédures stockées MySQL ?🎜🎜
    🎜🎜Déclaration de contrôle de flux🎜🎜

    🎜 si instruction conditionnelle 🎜 h4>🎜 L'instruction IF contient plusieurs jugements conditionnels. L'instruction est exécutée en fonction du résultat de TRUE, FALSE, qui est. similaire au if dans les langages de programmation. >, else if, else ont une syntaxe similaire. 🎜🎜Définissez la procédure stockée, saisissez un entier et utilisez l'instruction if pour déterminer s'il s'agit d'un nombre positif ou négatif. Le code est le suivant : 🎜
    -- 创建过程
    create procedure mypro7(out sum int)
    begin
    declare num int default 0;
    set sum = 0;
    loop_sum:loop-- 循环开始
    set num = num+1;
    set sum = sum+num;
    if num>=10 then
    leave loop_sum;
    end if;
    end loop loop_sum; -- 循环结束
    end;
    -- 调用过程
    call mypro7(@sum);
    -- 查询变量值
    select @sum;
    Copier après la connexion
    Copier après la connexion
    🎜Résultats d'exécution🎜🎜A quoi servent les procédures stockées MySQL ?🎜

    🎜🎜instruction conditionnelle de cas🎜 h4>🎜case code> est une autre instruction conditionnelle, similaire à la syntaxe <code>choose et when dans les langages de programmation. L'instruction case dans MySQL a deux formats de syntaxe 🎜. 🎜🎜Définissez une procédure stockée, saisissez un entier et utilisez une instruction case pour déterminer s'il s'agit d'un nombre positif ou négatif. Le code est le suivant : 🎜
    SHOW PROCEDURE STATUS;
    Copier après la connexion
    Copier après la connexion
    🎜Exécutez les résultats🎜🎜🎜🎜🎜Définissez une procédure stockée, saisissez un. entier et utilisez une instruction case pour déterminer s'il s'agit de 1 ou 2. , le code est le suivant : 🎜
    SHOW PROCEDURE status where db = 'schooldb';
    Copier après la connexion
    Copier après la connexion
    🎜Résultats d'exécution🎜

    A quoi servent les procédures stockées MySQL ?

    两种 case 语法都可以实现条件判断,但第一种适合范围值判断,而第二种适合确定值判断。

    while 循环语句

    while语句的用法和 java中的 while循环类似。

    定义存储过程,使用 while 循环输出 1 到 10 的累加和,代码如下所示:

    -- 创建过程
    create procedure mypro5(out sum int)
    begin
    declare num int default 0;
    set sum = 0;
    while num<p>运行结果</p><p><img src="https://img.php.cn/upload/article/000/000/024/fcb90e661eadc288d2d1d57364b7978a-7.png" alt="A quoi servent les procédures stockées MySQL ?"></p><h4>
    <a id="repeat__243"></a><strong>repeat 循环语句</strong>
    </h4><p><code>repeat</code>语句的用法和 <code>java</code>中的 <code>do…while</code> 语句类似,都是先执行循环操作,再判断条件,区别是 <code>repeat</code>表达<br> 式值为 <code>false</code>时才执行循环操作,直到表达式值为 <code>true</code>停止。</p><p>定义存储过程,使用 repeat 循环输出 1 到 10 的累加和,代码如下所示:</p><pre class="brush:php;toolbar:false">-- 创建过程
    create procedure mypro6(out sum int)
    begin
    declare num int default 0;
    set sum = 0;
    repeat-- 循环开始
    set num = num+1;
    set sum = sum+num;
    until num>=10
    end repeat; -- 循环结束
    end;
    -- 调用过程
    call mypro6(@sum);
    -- 查询变量值
    select @sum;
    Copier après la connexion

    运行结果

    A quoi servent les procédures stockées MySQL ?

    loop 循环语句

    循环语句,用来重复执行某些语句。

    执行过程中可使用 leave语句或 iterate 跳出循环,也可以嵌套 IF等判断语句。

    • leave语句效果相当于 java 中的 break,用来终止循环;
    • iterate语句效果相当于 java 中的 continue,用来结束本次循环操作,进入下一次循环。

    定义存储过程,使用 loop 循环输出 1 到 10 的累加和,代码如下所示:

    -- 创建过程
    create procedure mypro7(out sum int)
    begin
    declare num int default 0;
    set sum = 0;
    loop_sum:loop-- 循环开始
    set num = num+1;
    set sum = sum+num;
    if num>=10 then
    leave loop_sum;
    end if;
    end loop loop_sum; -- 循环结束
    end;
    -- 调用过程
    call mypro7(@sum);
    -- 查询变量值
    select @sum;
    Copier après la connexion
    Copier après la connexion

    运行结果

    A quoi servent les procédures stockées MySQL ?

    代码中的 loop_sum 相当于给循环贴个标签,方便多重循环时灵活操作。

    存储过程的管理

    存储过程的管理主要包括:显示过程、显示过程源码、删除过程。

    比较简单的方式就是利用 navicat 客户端工具进行管理,鼠标点击操作即可,如下图所示:

    A quoi servent les procédures stockées MySQL ?

    显示存储过程

    SHOW PROCEDURE STATUS;
    Copier après la connexion
    Copier après la connexion

    显示特定数据库的存储过程

    SHOW PROCEDURE status where db = 'schooldb';
    Copier après la connexion
    Copier après la connexion

    显示特定模式的存储过程,要求显示名称中包含“my”的存储过程

    SHOW PROCEDURE status where name like '%my%';
    Copier après la connexion

    显示存储过程“mypro1”的源码

    SHOW CREATE PROCEDURE mypro1;
    Copier après la connexion

    A quoi servent les procédures stockées MySQL ?

    删除存储过程“mypro1”

    drop PROCEDURE mypro1;
    Copier après la connexion

    【相关推荐:mysql视频教程

    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!

    Étiquettes associées:
    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