目录
概念:存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传 输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库 SQL 语言层面 的代码封装与重用。
特点:封装,复用, 可以把某一业务SQL封装在存储过程中,需要用到的时候直接调用即可;可以接收参数,也可以返回数据, 在存储过程中,可以传递参数,也可以接收返回值;减少网络交 互,提升效率,如果一次操作涉及到多条SQL,每执行一次都是一次网络传输。 如果将这些sql 操作封装在存储过程中,只需网络交互一次可能就可以了。
一、存储过程基础
1.创建存储过程
创建一个提取students表所有学生年龄和的存储过程s1
代码如下(示例):
create procedure s1()
begin
select sum(age) from students;
end;
视图如下:
2.调用存储过程
调用存储过程s1
代码如下(示例):
call s1();
视图如下:
3.删除存储过程
删除存储过程s1
代码如下(示例):
drop procedure s1;
视图如下:
二、变量
1.查看变量
查看所有全局变量
代码如下(示例):
show global variables;
视图如下:
查看所有会话变量
代码如下(示例):
show session variables;
视图如下:
查看指定变量
查看以auto开头的session级别的系统变量
代码如下(示例):
show session VARIABLES like 'auto%';
视图如下:
2.自定义变量
创建一个变量year并为它赋值为22
代码如下(示例):
set @year:='22';
视图如下:
查询students表年龄等于变量year的同学的数据
代码如下(示例):
select * from students where age=@year;
视图如下:
三、游标
概念:游标(CURSOR)是用来存储查询结果集的数据类型 , 在存储过程和函数中可以 使用游标对结果集进行循环的处理。
整体流程:开始-定义变量-创建游标-打开游标-执行循环-提取数据-更新-关闭游标-结束
1.游标语法
游标的使用包括游标的声明、OPEN、 FETCH 和 CLOSE,其语法分别如下:
//创建游标
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp14`()
BEGIN
DECLARE n_id int DEFAULT 0;
DECLARE n_name VARCHAR(20) DEFAULT null;
DECLARE n_pwd VARCHAR(20) DEFAULT null;
//定义游标,数据存进去
DECLARE cursor_a CURSOR FOR select * from user where id<=5;
//需要一张表装数据
drop table if EXISTS c_user;
create table c_user(id int(10) PRIMARY KEY,
nsername varchar(20) not null,
pwd varchar(20) not null);
//打开游标
OPEN cursor_a;
//循环取数据
WHILE true DO
//取每条数据
FETCH cursor_a into n_id,n_name,n_pwd;
//插入到表中
insert into c_user VALUES(n_id,n_name,n_pwd);
END WHILE;
//关闭游标
close cursor_a;
END