Maison  >  Article  >  base de données  >  Résumé de l'instruction SQL avancée de la procédure stockée MySQL

Résumé de l'instruction SQL avancée de la procédure stockée MySQL

WBOY
WBOYavant
2022-12-07 17:16:072397parcourir

Cet article vous apporte des connaissances pertinentes sur mysql, qui présente principalement le contenu pertinent sur les instructions SQL avancées des procédures stockées. Examinons-le ensemble, j'espère qu'il sera utile à tout le monde.

Résumé de l'instruction SQL avancée de la procédure stockée MySQL

Apprentissage recommandé : Tutoriel vidéo MySQL

Instructions SQL avancées MySQL (procédures stockées)

1. Présentation des procédures stockées

1.1 Qu'est-ce qu'une procédure stockée

Une procédure stockée est un ensemble d'instructions SQL conçues pour accomplir une fonction spécifique.
Lors de l'utilisation d'une procédure stockée, les tâches courantes ou complexes sont écrites à l'avance à l'aide d'instructions SQL et stockées sous un nom spécifié. Ce processus est compilé, optimisé et stocké dans le serveur de base de données. Lorsque vous devez utiliser cette procédure stockée, il vous suffit de l'appeler. Les procédures stockées sont plus rapides et plus efficaces en termes d'exécution que le SQL traditionnel.

1.2 Avantages des procédures stockées

  1. Après une exécution une fois, le code binaire généré résidera dans le tampon pour améliorer l'efficacité de l'exécution.
  2. Une collection d'instructions SQL et d'instructions de contrôle, offrant une grande flexibilité.
  3. Stocké côté serveur et charge réseau réduite lorsqu'il est appelé par le client.
  4. Peut être appelé plusieurs fois et peut être modifié à tout moment sans affecter les appels des clients.
  5. Peut effectuer toutes les opérations de base de données et contrôler les autorisations d'accès aux informations de la base de données.

2. Créer, appeler et afficher des procédures stockées

2.1 Créer des procédures stockées

delimiter $$                 #将语句的结束符号从分号;临时改为两个$$(可以自定义)
create procedure proc ()     #创建存储过程,过程名为proc,不带参数
-> begin                     #过程体以关键字begin开始
-> select * from store_info; #过程体语句
-> end $$                    #过程体以关键字end结束

delimiter ;                   #将语句的结束符号恢复为分号

Exemple :

delimiter $$create procedure proc01 ()-> bengin
-> create table student(id int,name char(10),age int);-> insert into student values(1,'zhangsan',18);-> insert into student values(2,'lisi',18);-> select * from student;-> end $$delimiter ;

Résumé de linstruction SQL avancée de la procédure stockée MySQL

2.2 Appeler et afficher les procédures stockées

call proc;               #调用存储过程



show create procedure [数据库.]存储过程名;  #查看某个存储过程的具体信息

show create procedure proc;
show create procedure proc\G

show procedure status [like '%proc%'] \G

Exemple :

call proc01;   

 show create procedure proc01;
 show create procedure proc01\G       #查看存储过程的具体信息
 
 show procedure status like '%Proc01%'\G

Résumé de linstruction SQL avancée de la procédure stockée MySQL
Résumé de linstruction SQL avancée de la procédure stockée MySQL
Résumé de linstruction SQL avancée de la procédure stockée MySQL

2.3 Supprimer la procédure stockée

 #存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。
drop procedure if exists proc;
 #仅当存在时删除,不添加If EXISTS 时,如果指定的过程不存在,则产生一个错误。

Exemple :

drop procedure if exists proc01;

Résumé de linstruction SQL avancée de la procédure stockée MySQL

3. Paramètres de la procédure stockée

  • Paramètres d'entrée IN : Indique l'appel ou transmet une valeur au processus. (La valeur entrante peut être un littéral ou une variable)
  • Paramètre de sortie OUT  : Indique que le processus transmet la valeur à l'appelant. (Plusieurs valeurs peuvent être renvoyées) (La valeur sortante ne peut être qu'une variable)
  • Paramètres d'entrée et de sortie INOUT  : Cela signifie que l'appelant transmet la valeur au processus et que le processus transmet la valeur à l'appelant . (Les valeurs ne peuvent être que des variables)

Remarque : les noms de variables ne peuvent pas contenir de traits de soulignement.

delimiter $$create procedure proc2(in stuname char(20))  #参数为stuname,数据类型一定要与下面的where语句后字段的数据类型相同-> begin
-> select * from student where name = stuname;-> end $$delimiter ;call proc2('zhangsan');       #调用存储过程,并传入参数‘zhangsan’

Résumé de linstruction SQL avancée de la procédure stockée MySQL

4. Instruction de contrôle des procédures stockées

Résumé de linstruction SQL avancée de la procédure stockée MySQL

4.1 Instruction conditionnelle : if-then-else… end if

 delimiter $$  
 create procedure proc03(in innum int)   #创建存储过程proc03,参数为innum,类型为int 
 -> begin 
 -> declare var int;         #定义变量var为int类型 
 -> set var=innum*2;         #变量var的值等于传入的参数值乘2
 -> if var>=10 then          #当var的值大于10时,id值会加1,否则减1
 -> update ss set id=id+1;  
 -> else 
 -> update ss set id=id-1;  
 -> end if;  
 -> end $$
  
 delimiter ;
 
 call proc03(8);    #调用存储过程,并传入参数8
 
 call proc03(3);    #调用存储过程,并传入参数3

Résumé de linstruction SQL avancée de la procédure stockée MySQL

4.2 Instruction de boucle : while ···· terminer pendant que

 delimiter $$                   #修改默认结束符为$$
 create procedure proc05()      #创建存储过程proc04
 -> begin                       #过程体以关键字begin开始
 -> declare var int(10);        #定义变量var为int类型
 -> set var=0;                  #var的起始值为0
 -> while var insert into ss values(var);  
 -> set var=var+1;              #每次循环后var值自增1
 -> end while;                  #结束while循环
 -> end $$                      #创建存储过程结束
 
 delimiter ;                    #重新修改默认结束符为原始的;
 
 call proc05;                   #调用存储过程proc04

Résumé de linstruction SQL avancée de la procédure stockée MySQL

Apprentissage recommandé : tutoriel vidéo 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer