#存储过程 /* 一组预先编译好的sql语句集合,理解成批处理语句 好处: 1、提高代码重用性 2、简化操作 3、减少了编译次数并减少了和数据库服务器的连接次数,提高了效率 */ #一、创建 /* create procedure 存储过程名(参数列表) begin 一组合法的sql语句 end 注意: 1、参数列表 参数模式 参数名 参数类型 in stuname varchar(20) 2、参数模式 in 该参数可以作为输入,传入值 out 该参数可以作为输出,返回值 inout 输入输出都可以 3、如果存储过程体只有一句话,begin end可以省略 4、存储体中,每条sql语句的结尾要求必须加分号;存储过程的结尾可以用delimiter重新设置 */ #二、调用 /* call 存储过程名(实参列表); */ #1、空参列表 #案例:插入到admin表中五条记录 use girls; select * from admin; delimiter & create procedure myp1() begin insert into admin(username, password) values(‘john1‘, ‘0000‘), (‘lily‘, ‘1000‘); end & call myp1()& select * from admin& #2、创建带in模式参数的存储过程 #案例1:根据女生名,查询对应的男生信息 delimiter & create procedure mpv2( in beauty_name varchar(20) ) begin select bo.* from beauty as b left join boys as bo on bo.id = b.boyfriend_id where b.name=beauty_name; end & call mpv2(‘柳岩‘)& #案例2:创建存储过程实现,用户是否登录成功 create procedure mpv3( in username varchar(20), in password varchar(20) ) begin declare result varchar(20) default ‘‘; select count(*) into result #赋值 from admin where admin.username = username and admin.password = password; select if(result>0, ‘成功‘, ‘失败‘); end& call mpv3(‘张飞‘, ‘8888‘)& call mpv3(‘john‘, ‘8888‘)& #3、创建带out模式的存储过程 #案例1:根据女生名,返回对应的男生名 create procedure mpv4( in beautyName varchar(20), out boyName varchar(20) ) begin select bo.boyName into boyName from boys as bo inner join beauty as b on bo.id = b.boyfriend_id where b.name = beautyName; end& #调用 call mpv4(‘小昭‘, @bName)& select @bName; #4、带inout模式的存储过程 #案例1:传入a和b两个值,最终a和b都翻倍并返回 create procedure mpv5( inout a int, inout b int ) begin set a = a*2; set b = b*2; end& set @v1 = 10& set @v2 = 20& call mpv5(@v1, @v2)& select @v1, @v2& #存储过程的删除 #只能一次删一个 # drop procedure 存储过程名; #查看存储过程 show create procedure mpv5; delimiter ;