MYSQL存储过程

一、什么是MYSQL存储过程?

MySQL存储过程实现了比MySQL函数更为强大的功能,数据库开发人员可以将功能复杂、使用频繁的MySQL代码封装成MySQL,从而提高MySQL代码的重用性。存储过程保存的是一段存储程序,没有保存表数据。

二、MySQL存储过程

1.创建存储过程的语法格式

1.存储过程是数据库的对象,因此在创建存储过程时,需要指定该存储过程隶属于哪个数据库。
2.同一数据库内,存储过程名不能重名。

语法格式如下:
create procedure 存储过程名(参数1,参数2,)
[存储过程选项]
begin
存储过程语句块
end;


存储过程有3种类型的参数:in参数、out参数、inout参数。
in:默认选项,输入参数,该参数只参与内部操作,不会作为返回值。
out:输出参数,该参数参与内部过程之后,会作为返回值返回给调用程序。
inout:既是输入参数,又是输出参数。


存储过程由以下一种或几种选项组合而成。
language sql
[not] deterministic
constains sql | no sql | reads sql date | modifies sql data
sql security {definer | invoker}
comment ‘注释’


language sql:默认选项,用于说明存储过程语句块使用SQL语言编写
deterministic(确定性):默认not deterministic,即返回值不确定
contains sql:默认选项,表示存储过程语句块中不包含读或写数据的语句。
no sql:表示存储过程语句块中不包含SQL语句。
reads sql data:表示存储过程语句块中包含select查询语句。
modifies sql data:表示存储过程语句块中包含更新语句。
sql security definer:该存储过程只能由创建者调用。
sql security invoker:默认选项,该存储过程可被其他用户调用。
comment:添加功能说明等注释信息


举个栗子:

delimiter $$  --修改结束符
create procedure getnum(in stuno varchar(5),out num int)  #in为默认选项,可不写
reads sql data
begin 
set @num=0;
select count(degree) into num from score where Sno=stuno;  #该用法只适合在存储过程中使用
end
$$
delimiter ;  --改回结束符

2.存储过程的调用

调用存储过程需使用call关键字。若存储过程存在参数,还需向存储过程传递参数。
举个栗子:

set @stuno='108';
call getnum(@stuno,@num);
select @num;

结果:
运行结果

3.查看存储过程

1.查看所有存储过程的定义:
show procedure status

2.查看某数据库中的所有存储过程名:
select name from mysql.proc where db=‘数据库名’ and type=‘procedure’;

3.查看指定数据库的指定存储过程的详细信息:
show create procedure 存储过程名

4.存储过程的信息保存在information_schema数据库中的routines表中,可以使用select语句查询存储过程的相关信息:
select * from information_schema.routines where routines_name=‘存储过程名’

4.删除存储过程

1.若某个存储过程不再使用,则可以使用drop procedure语句将其删除。
drop procedure 存储过程名

2.当需要修改存储过程的定义时,可使用drop procedure语句暂时将该存储过程删除,再使用create procedure语句重新创建相同名字的存储过程即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值