MySQL数据库提升篇-----存储过程和函数
day06 MySQL数据库存储过程和函数
一、存储过程和函数的概述:
数据库的存储过程和存储函数是指在数据库中定义的一些sql语句的集合,直接调用这些存储过程的名字或存储函数的名字就可以直接使用这些sql。可以避免开发人员大量的写一些sql语句操作数据,可以减少客户端和服务器端的数据传输。所以,学好存储过程和存储函数也是很重要的哦!
二、存储过程【procedure】
1、创建存储过程
create procedure 自定义一个存储名()
begin
select 语句
end;
call 存储名(); 调用存储过程
2、删除存储过程
drop procedure 存储名;
3、带参数的存储过程
3.1:in参数,即输入参数
create procedure 存储名(in 列名 数据类型)
begin
select 语句
end;
call 存储名(列名的值);
3.2:out参数,即输出参数
create procedure 存储名(out 列名 数据类型)
begin
select * into 列名 from 表名;
end;
call 存储名(@列名);
3.3:inout参数,即输入输出参数
create procedure 存储名(inout 列名 数据类型)
begin
select * into 列名 from 表名;
end;
set @列名=某个值 //定义一个变量并赋值
call 存储名(@列名);
4、定义变量
4.1:定义局部变量
declare a int //定义
set a=10; //赋值
select a; //输出
4.2:定义全局变量“@作为起始符”
set @b=20; //定义会话变量
select @b; //输出
三、存储函数【function】
1、创建存储函数定义的实例。
create function 函数名(a int , b int) returns int
begin
declare c int;
set c=a+b;
return c;
end;
select 函数名(a的数值,b的数值) //调用存储函数
四、光标的运用
在MySQL查询数据库肿,存储过程和存储函数中使用光标可以实现逐条的读取结果集中的记录。主要包括以下几个步骤:
1、声明光标:
declare 光标名 cursor select_name
译;select_name:是一个select语句,返回一行或多行数据。
实例:
declare info_student cursor for select
sid,name,age
from student
where sid=1;
2、打开光标
open 光标名称
3、使用光标
fetch 光标名称 into 列名;
4、关闭光标
close 光标名称
五、查看存储过程和函数
1、使用show status 语句查看
show { procedure | function } status [like 'pattern']
译:
procedure:表示查询存储过程
function:表示查询存储函数
like 'pattern':用来匹配存储过程或函数名称。
2、使用show create语句查看
show create { procedure | function } sp_name;
译;
procedure:表示查询存储过程
function:表示查询存储函数
sp_name:表示存储过程或函数名称
3、修改存储过程和存储函数
alter { procedure | function } sp_name
{ contains sql | no sql | reads sql data | modifies sql data }
| sql security { definer | invoker }
| comment 'string'
译:
procedure | function:表示是存储过程还是存储函数
sp_name :表示名称
contains sql:表示子程序包含sql语句,但是不包含读写数据的语句
no sql:表示子程序包含sql语句
reads sql data:表示子程序中包含读数据的语句
modifies sql data :表示子程序中包含写数据的语句
definer | invoker:表示指明权限执行,前者是定义者自己能够执行,
后者是调用者可以执行
comment 'string':注释信息
4、删除存储过程和存储函数
drop { procedure | function } sp_name
六、结束语:
学到这里,存储过程和存储函数就已经学完了哦!好好消化一下吧!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341