【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 传递时根据? 顺序,放对应参数变量即可

3、参考文章

MYSQL总教程:http://www.cnblogs.com/lyhabc/p/3691555.html MYSQL存储过程入门: ??http://kb.cnblogs.com/page/107457/? ?? MYSQL存储过程中的基本函数:http://blog.chinaunix.net/uid-20577907-id-3175057.html MYSQL存储过程实例: http://blog.csdn.net/woshixuye/article/details/8348180

 

? ? ? ?
相关文章