MySQL学习笔记(25)-存储过程

存储过程

存储过程简称过程,procedure,是一种用来处理数据的方式。

存储过程是一种没有返回值的函数。

创建过程

Create procedure 过程名字([参数列表])

Begin

    -- 过程体

End

-- 创建存储过程
create procedure pro1()  -- 假设过程中需要显示数据:使用select
select * from my_student;

查看过程

函数的查看方式完全适用于过程:关键字换成procedure

查看所有过程:show procedure status[like 'pattern'];

-- 查看过程
show procedure status like 'pro%'\G

查看过程创建语句:show create procedure 过程名;

-- 查看过程创建语句
show create procedure pro1\G

调用过程

过程没有返回值:select是不能访问的。


过程有一个专门的调用关键字:call

-- 调用过程
call pro1();

修改过程&删除过程

过程只能先删除,后新增

Drop procedure 过程名;

-- 删除过程
drop procedure pro1;
show procedure status\G

过程参数

函数的参数需要数据类型指定,过程比函数更严格。

过程还有自己的类型限定:三种类型

    In:数据只是从外部传入给内部使用(值传递):可以是数值也可以是变量。

    out:只允许过程内部使用(不用外部数据),给外部使用的。(引用传递:外部的数据会被先清空才会进入到内部):只能是变量。

Inout:外部可以在内部使用,内部修改也可以给外部使用:典型的引用传递:只能传变量

基本使用

Create procedure 过程名(in 形参名字 数据类型,out 形参名字 数据类型,inout 形参名字 数据类型)

-- 过程参数
delimiter $$
create procedure pro1(in int_1 int,out int_2 int,inout int_3 int)
begin
-- 先查看三个变量
select int_1,int_2,int_3; -- int_2的值一定是NULL
end
$$
delimiter ;

调用:out和inout类型的参数必须传入变量,而不能是数值

call pro1(1,2,3);
-- 设置变量
set @int_1 = 1;
set @int_2 = 2;
set @int_3 = 3;
select @int_1,@int_2,@int_3;
call pro1(@int_1,@int_2,@int_3 );
select @int_1,@int_2,@int_3;

存储过程对于变量的操作(返回)是滞后的:是在存储过程调用结束的时候,才会重新将内部修改的值赋值给外部传入的全局变量。

-- 过程参数
delimiter $$
create procedure pro1(in int_1 int,out int_2 int,inout int_3 int)
begin
  -- 先查看三个变量
  select int_1,int_2,int_3; -- int_2的值一定是NULL(三个当前是局部变量)
  -- 修改局部变量
  set int_1 = 10;
  set int_2  = 100;
  set int_3 = 1000;
  -- 查看局部变量
  select int_1,int_2,int_3;
  -- 查看全局变量
  select @int_1,@int_2,@int_3;
  -- 修改全局变量
  set @int_1 = 'a';
  set @int_2 = 'b';
  set @int_3 = 'c';
  -- 查看全局变量
  select @int_1,@int_2,@int_3;
end
$$
delimiter ;

测试:传入数据1,2,3:说明局部变量与全局变量无关

-- 设置变量
set @int_1  = 1;
set @int_2 = 2;
set @int_3 = 3;
call pro1(@int_1,@int_2,@int_3);


最后:在存储过程调用结束之后,系统会将局部变量重复返回给全局变量(out和inout)




猜你喜欢

转载自blog.csdn.net/qq_38826019/article/details/80671429