存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化开发工作,减少数据在数据库和服务器之间的传输,提高数据处理效率。
存储过程思想上很简单,就是数据库SQL语言的封装和复用
特点:封装、复用
可以接收参数,也可以返回数据
减少网络交互,效率提升
一.基本语法
1.创建存储过程:
2.调用:
3.查看和删除
例如:
二.变量
1.系统变量
系统变量是MYSQ服务器提供,不是用户定义的,属于服务器层面,分为全局变量和会话变量。
例如:
如果没有指定session/global,默认是session,会话变量。
服务器重启后,所设置的全局参数会失效,想不失效,可在/etc/my.cnf中配置。
2.用户定义变量
用户定义变量指用户自己定义的变量,用户变量不用提前声明,直接用“@变量名”使用即可,作用域为当前连接。
例如:
用户定义的变量不需要声明或初始化,默认为null;
例如:
3.局部变量
局部变量是根据·定义在局部生效的变量,通过declare声明,可用作存储过程内的局部变量和输入参数,范围在begin...end之间。
例如:
三.if条件判断
例如:
四.参数
例如:
五.case
例如:
六.循环
1.while循环
例如:
2.repeat循环
例如:
3.loop循环
七.cursor游标
游标用来存储查询结果集的数据类型,在存储过程和函数中可使用游标对结果集进行循环处理。
、例如:
create procedure p10(in uage int)
begin
declare uname varchar(10);
declare gender varchar(10);
#创建游标(要先声明游标,再声明普通变量)
declare u_cursor cursor for select name,gender from tb_user where age<=uage;
#声明条件处理程序,当满足状态码为02000时退出操作,退出时关闭游标。
declare exit handler for sqlstate '02000' close u_cursor;
create table if not exists tb_user_pro(
id int primary key auto_increment,
name varchar(10),
gender varchar(10)
);
#开启游标
open u_cursor;
while true do
#获取游标记录
fetch u_cursor into uname,gender;
insert into tb_user_pro values (null,uname,gender);
end while;
#关闭游标
close u_cursor;
end;
call p10(40);