【MySQL其他】存储过程
?一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
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 传递时根据? 顺序,放对应参数变量即可
