【MySQL其他】存储过程
?一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
? ? ? ? ? ?3、USING 传递时根据? 顺序,放对应参数变量即可
1、存储过程调试工具
navicat?2、简单存储过程编写
2.1、不带参数create procedure UserInfo() #过程名字叫UserInfo begin select*from user; end;2.2、带输入参数(参数不写in或者out时,默认是in)
create procedure check(in id int,in result int) #带id和result两个输入参数,并且是int型的 begin set@id= id; #将输入参数赋值给变量@id set@result= result; update user set result =@resultwhere id =@id; end;2.3、分页读取数据库表记录
#传入参数当前页、Total = 15每页显示的记录条数 create procedure SP_GET_UserInfo(in `Page` INT,in `Total` INT) BEGIN SET @pagesize = 15; SET @count = (SELECT count(*) as count from user); SET @pagenum = CEIL(@count/@pagesize); #每页显示15条,输出user表的总页数 IF Page < 1 THEN SET Page = 1; END IF; SET @cSql = concat('SELECT *,@pagenum as allcount FROM ', 'user', ' LIMIT ?, ?'); PREPARE iOffset FROM @cSql; #PREPARE 预定义一个语句,并将@cSql赋值给iOffset SET @iOffset = (Page - 1) * Total; SET @iTotal = Total; EXECUTE iOffset USING @iOffset, @iTotal; #EXCUTE 执行预备语句定 DEALLOCATE PREPARE iOffset; # DEALLOCATE PREPARE 表示删除这条预定义语句 END注释:1、只有limit不支持传递参数,所以需要通过预定义语句PREPARE和EXECUTE传递变量并执行。 ? ? ? ? ? ?2、 :=表示赋值。= 可以表示判断、赋值。
? ? ? ? ? ?3、USING 传递时根据? 顺序,放对应参数变量即可