SQL语句需要先编译后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的sql语句集,经过编译后存储在数据库中,用户指定存储过程的名字并给定参数来调用执行。
存储过程是可编程的函数,在数据库中创建并保存。可以有sql语句和控制结构组成。
1、创建存储过程
#删除存储过程
drop procedure if exist myproc();
#创建存储过程
create procedure myproc()
begin
#生命变量,赋值,输出到结果集
declare i int;
declare name varchar(5);
set i=1;
select i,name;
end
procedure存储过程 create创建 begin函数开始标志 end函数结束标志
declare声明变量 set操作变量 double小数类型 varchar字符串类型
boolean布尔类型 date日期类型 int整数类型 default默认值 drop删除
数学运算:
+-*/加减乘除
mod(x,y)求x/y的模。
round(x,2)x四舍五入保留两位小数
判断语句:
if语句: if 条件 then 内容
【elseif 条件 then 内容】
【else 内容】end if;
case语句: case 变量 when 值1 then 内容1 when 值2 then 内容2 ... else 内容n end case
循环语句:
while 语句: while 条件 do 【内容】 end while;
repeat语句: repeat 内容 until 条件 end repeat;
loop语句: loop_label:loop 执行内容+【if 条件 then leave loop_label;end if】end loop;
leave用于立即退出循环,无需等待检查条件。
2、输入输出参数
MySQL存储过程的参数共有三种,IN输入参数,OUT输出参数,INOUT输入输出参数。
格式为:create procedure 过程名称([IN | OUT | INOUT] 参数名 参数类型)
以@开头的变量时用户变量,时基于会话变量实现的,可以暂存值,并传递给同一连接下的下一条sql语句使用的变量,当客户端退出时,变量会释放。
set @x=10;定义用户变量 call myproc(@x);传入参数 select @x;查询传出参数
3、接收查询结果
一个或多个字段:
select 列1 into 变量或用户变量 from 表格;
select 列1,列2... into 变量1,变量2... form 表格;顺序和数量需要一一对应。
游标:遍历返回的多行结果。
步骤:
1、在使用游标前,必须声明他。
2、声明后必须打开游标以供使用。
3、对于填有数据的游标,根据需要取出各行。
4、使用结束是必须关闭它。不明确关闭时,在执行end后自动关闭。
#定义遍历数据结束标志,必须声明在游标前。
declare done int default 0;
#定义游标
declare v_cur cursor for select语句;
#将结束标志绑定到游标
declare continue handler for not found set done=1;
#打开游标
open v_cur;
#提取游标中的业务
fetch c_cur into 列1,列2...;
#关闭游标
close v_cur;
4、存储过程优点
1、增强sql语言的功能和灵活性,通过控制语句的编写完成复杂的判断和运算。
2、标准组件式编程,存储过程复用率高,且易于维护,无需修改应用源代码。
3、较快的执行速度,存储过程是预编译的,节省了编译时间。
4、减少网络流量,无需多次将数据传入程序运算,只需调用存储过程。大大降低网络负载。
5、限制访问权限,进一步保证数据安全。