存储过程
存储过程:类似于Java中的方法
好处:1、提高代码的重用性 2、简化操作 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
含义:一组预先编译好的SQL语句的集合,可以理解成批处理语句
一、创建语法
create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法的SQL语句)
end;
注意:
1、参数列表包含三部分:参数模式 参数名 参数类型
例如: IN stuname varchar(20)
参数模式:
IN :该参数可以作为输入,也就是该参数需要调用方传入值
OUT :该参数可以作为输出,也就是该参数可以作为返回值
INOUT :该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值
2、如果存储过程体仅仅只有一句话,begin end可以省略,存储过程体中的每条SQL语句的结尾要求必须加分号。
存储过程的结尾可以使用delimiter 重新设置
语法:delimiter 结束标记 例如:delimiter $
二、调用语法
call 存储过程名(实参列表);
新建admin表
create table admin( id int primary key auto_increment, aname varchar(55), pwd varchar(55) ); insert into admin(aname,pwd) values('张三','123456');
1、空参列表
例如:向admin表中插入5条记录
a、新建存储过程myp1
create procedure myp1() BEGIN insert into admin(aname,pwd) values('李四','123456'), ('王五','123456'),('赵六','123456'),('张龙','123456'), ('赵虎','123456'); END;
如果出现不支持存储过程体和存储过程结束同时有分号,则创建如下:
delimiter $ create procedure myp1() BEGIN insert into admin(aname,pwd) values('李四','123456'), ('王五','123456'),('赵六','123456'),('张龙','123456'), ('赵虎','123456'); END $
b、调用存储过程myp1
call myp1();
2、创建带in模式参数的存储过程
例如:创建存储过程实现,根据部门名,查询对应的所有员工的信息
create procedure myp2(in depName varchar(55)) BEGIN select * from employee e where e.departmentid= (select id from department where dname=depName); end;
调用
call myp2('技术部');
3、创建带out模式的存储过程
例如:创建存储过程体,根据员工名,查询对应的部门名称
create procedure myp3(in ename varchar(55),out dname varchar(55)) BEGIN select d.dname into dname from department d where d.id= (select departmentid from employee e where e.ename=ename); end;
调用
call myp3('张三',@dname); select @dname;
4、创建带inout模式参数的存储过程
例如:传入a和b两个值,最终a和b都翻倍并返回
create procedure myp4(inout a int,inout b int) BEGIN set a=a*2; set b=b*2; end;
调用
set @a=5; set @b=8; CALL myp4(@a,@b); select @a,@b;
三、删除存储过程
语法:drop procedure 存储过程名
例如:删除存储过程myp1;
drop procedure myp1;
四、查看存储过程的信息
例如:查看存储过程myp2的信息
show create procedure myp2;