MySQL 存储过程

在大型数据库系统中,一组为了完成特定功能的SQL语句集。存储在数据库中,经过第一次编译后再次调用不需要再次编译(效率较高),用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行他,存储过程是数据库中的一个重要对象。

 

与函数的区别

相同点

1、存储过程和函数的目的都是为了可重复地执行操作数据库的SQL语句的集合。

 

不同点

1、标识符不同,函数的标识符为function,过程为procedure

2、函数有返回值,且必须返回,而过程没有返回值

3、过程无返回值类型,不能将结果直接赋值给变量;函数有返回值类型,调用时,除在select中,必须将返回值赋给变量。

4、函数可以在select语句中直接使用,而过程不能。

 


存储过程操作

 

创建过程

语法:

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

begin

     过程体

end

结束符

 

如果过程体中只有一条指令,那么可以省略begin和end 

 

查看过程

 show procedure status [like 'pattern'];

查看过程创建语句

show create procedure 过程名;

 

调用过程

过程没有返回值,所以select不能用来调用,有专门的语法调用过程

语法:call 过程名([实参列表]);

 

删除过程

drop procedure 过程名;

 


存储过程的形参类型

存储过程也允许提供参数(形参和实参),存储的函数也和函数一样,需要指定其类型

但是存储过程对参数还有额外的要求:自己的参数分类

in

表示该参数从外部传入到里面使用(过程内部使用):可以是数据,也可以是保存数据的变量

out

表示参数是从过程里面把数据保存到变量中,交给外部使用:传入的必须是变量

如果说传入的out变量,本身在外部有数据,那么在进入过程之后,第一件事就是被清空,视为null

inout

该数据可以从外部传入到过程内部使用,同时内部操作之后,又会将数据返还给外部

 

参数使用基本语法(形参)

过程类型 变量名 数据类型;          //例:  in int_1 int;

create procedure my_pro3(in int_1 int,out int_2 int,inout int_3 int)
begin

end

 

当out类型和inout类型数据传入过程之后,实际上没有改变外部变量的值,而是把值给了形参,但是形参会将out类型的值清除为NULL 

在执行到end之后,开始工作,判断变量是否为out或inout类型:如果是,将内部代替out和inout变量的对应形参的值重新赋值外部变量,会将外部变量本身的值覆盖

你可能感兴趣的:(MySQL学习)