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.
L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.
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.
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éesLa 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.
Simplifier les opérations complexes en encapsulant les traitements dans des unités faciles à utiliser
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.
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.
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;
Les résultats d'exécution sont les suivants
Cela peut aussi être utilisé dans le client Navicat" Visualisez le processus sous le nœud "Fonction", comme indiqué dans la figure ci-dessous :
Appelez la procédure stockée, le code est le suivant :
call mypro(1,2,@s);-- 调用存储过程 select @s;-- 显示过程输出结果
Résultats d'exécution
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 定义方法时的形参和返回值;begin
与end
表示过程主体的开始和结束,相当于 Java 定义方法的一对大括号;call
用来调用过程,@s
是用来接收过程输出参数的变量MySQL 存储过程的参数用在存储过程的定义,共有三种参数类型:
IN
输入参数:表示调用者向过程传入值(传入值可以是字面量或变量);OUT
输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量);INOUT
输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)。存储过程根据参数可分为四种类别:
1).没有参数的过程;
2).只有输入参数的过程;
3).只有输出参数的过程;
4).包含输入和输出参数的过程。
MySQL 中的存储过程类似 java 中的方法。
既然如此,在存储过程中也同样可以使用变量。java 中的局部变量作用域是变量所在的方法,而 MySQL 中的局部变量作用域是所在的存储过程。
DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
declare
用于声明变量;
variable_name
表示变量名称;
datatype
为 MySQL 的数据类型;
default
用于声明默认值;
例如:
declare name varchar(20) default ‘jack’。
SET 变量名 = 表达式值 [,variable_name = expression ...]
在存储过程中使用变量,代码如下所示
use schooldb;-- 使用 schooldb 数据库 -- 创建过程 create procedure mypro1() begin declare name varchar(20); set name = '丘处机'; select * from studentinfo where studentname = name; end; -- 调用过程 call mypro1();
运行结果
IF
语句包含多个条件判断,根据结果为 TRUE
、FALSE
执行语句,与编程语言中的 if
、else if
、else
语法类似。
定义存储过程,输入一个整数,使用 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);
-- 创建过程 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;
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;
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;
SHOW PROCEDURE status where db = 'schooldb';
两种 case 语法都可以实现条件判断,但第一种适合范围值判断,而第二种适合确定值判断。
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;
运行结果
循环语句,用来重复执行某些语句。
执行过程中可使用 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;
运行结果
代码中的 loop_sum 相当于给循环贴个标签,方便多重循环时灵活操作。
存储过程的管理主要包括:显示过程、显示过程源码、删除过程。
比较简单的方式就是利用 navicat 客户端工具进行管理,鼠标点击操作即可,如下图所示:
SHOW PROCEDURE STATUS;
SHOW PROCEDURE status where db = 'schooldb';
SHOW PROCEDURE status where name like '%my%';
SHOW CREATE PROCEDURE mypro1;
drop PROCEDURE mypro1;
【相关推荐: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!