mysql之存储过程

 内容预知

 1.mysql存储过程的相关知识

 1.1 存储过程的概念

1.2 存储过程的优点

 2.存储过程的管理

 2.1 创建存储过程

 2.2 调用存储过程 

2.3 查看存储过程 

2.4 存储过程的修改和删除 

 2.5 存储过程的正常使用

 3.存储过程的参数运用

(1)传入参数的存储过程 

(2) 传出参数的存储过程(out)

(3)输入输出参数(inout) 

4.存储过程的控制语句 

 4.1 if条件判断语句

4.2 while循环条件语句 


 1.mysql存储过程的相关知识

 1.1 存储过程的概念

存储过程是一组为了完成特定功能的SQL语句集合。类似于于其他编程语言中的函数,定义一个函数方法,可以随时起到传参调用的功能。

存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。

1.2 存储过程的优点

  • 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率。
  • SQL语句加上控制语句的集合,灵活性高。
  • 在服务器端存储,客户端调用时,降低网络负载。
  • 可多次重复被调用,可随时修改,不影响客户端调用。
  • 可完成所有的数据库操作,也可控制数据库的信息访问权限。

 2.存储过程的管理

 2.1 创建存储过程

基本格式: 

 ##创建存储过程:
 DELIMITER $$                  #将语句的结束符号从分号;临时改为两个$$ (可以是自定义)
 CREATE PROCEDURE Proc ()      #创建存储过程,过程名为Proc,不带参数
 -> BEGIN                      #过程体以关键字BEGIN开始
 -> select * from store_info;  #过程体语句
 -> END $$                     #过程体以关键字END结束
 ​
 DELIMITER;                    #将语句的结束符号恢复为分号

 mysql之存储过程_第1张图片

 2.2 调用存储过程 

 格式: call 存储过程名称

call proc1;

 mysql之存储过程_第2张图片

2.3 查看存储过程 

 SHOW CREATE PROCEDURE [数据库.]存储过程名;  #查看某个存储过程的具体信息​
 SHOW CREATE PROCEDURE Proc;
 SHOW CREATE PROCEDURE Proc\G

 mysql之存储过程_第3张图片

 

查看全库的存储过程 :

show  procedure status  like '%proc%';
show  procedure status  like '%proc%'\G;

mysql之存储过程_第4张图片

2.4 存储过程的修改和删除 

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

 mysql之存储过程_第5张图片

 2.5 存储过程的正常使用

mysql> delimiter $$
mysql> create procedure proc2 ()
    -> begin
    -> insert into info2 values('小白','running','2002-7-11');
    -> select * from info2 ;
    -> delete from info2 where name='小刚';
    -> end $$
mysql> delimiter ;
mysql> call proc2;

 mysql之存储过程_第6张图片

 3.存储过程的参数运用

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

(1)传入参数的存储过程 

创建传参的存储过程 :

mysql> delimiter $$
mysql> create procedure proc3 (in uname char(20))
    -> begin
    -> select * from student where name=uname;
    -> delete from student where name=uname;
    -> select * from student;
    -> end $$


mysql> delimiter ;

 注意:变量名不能含有下划线。

 mysql之存储过程_第7张图片

调用传参的存储过程 :

 call proc3 ('张三');

mysql之存储过程_第8张图片

(2) 传出参数的存储过程(out)

只接受变量的调用,不接受直接传入的值 

mysql> delimiter $$
mysql> create procedure test(out num int)
    -> begin
    -> set num=100;
    -> end $$


mysql> delimiter ;

mysql之存储过程_第9张图片

执行结果:

 mysql之存储过程_第10张图片

(3)输入输出参数(inout) 

mysql> create procedure proc5 (inout a int)  
    -> begin
    -> select a;
    -> set a=a+10;
    -> select a;
    -> end $$

delimiter ;

 

mysql之存储过程_第11张图片

执行结果:

 mysql之存储过程_第12张图片

 

 

4.存储过程的控制语句 

 4.1 if条件判断语句

 

mysql> delimiter $$
mysql> create procedure test2(in num int)
    -> begin
    -> if num >=10 then
    -> set num=num-5;
    -> else 
    -> set num=num*2;
    -> end if;
    -> select num;
    -> end $$


mysql> delimiter ;

mysql之存储过程_第13张图片

执行结果:

 mysql之存储过程_第14张图片

 

4.2 while循环条件语句 

注意:

decalre -i var 声明变量var为整数型( 即增加整型属性)。

decalre +i var 删除变量var的整型属性。

 

mysql> delimiter $$                                                                                                       
mysql> create procedure test3 ()
    -> begin
    -> declare a int;
    -> declare i int;
    -> set a=10;
    -> set i=1;
    -> while i<=10 do
    -> set a=a+10;
    -> set i=i+1;
    -> end while ;
    -> select a;
    -> end $$

mysql> delimiter ;

 

 mysql之存储过程_第15张图片

 

执行结果:

 mysql之存储过程_第16张图片

 

你可能感兴趣的:(数据库,mysql,数据库)