浏览数(10192)
【mysql存储过程,写个例子】
第一次接触存储过程是Sqlserver。
还记的当时用了大神的Corntab跑任务。自己写的定时任务内存高到吓人,服务端整个都要挂了。
后来Winserver下的Corntab丢了,苦于自学渣的天赋太差,自己用Ping命令+Bat做了死循环,内存占用也在12K左右而且还可以控制进程(或者线程)数量。
死循环不过是执行了很多Sql语句,这些语句带来的延迟会导致卡死或者进程过多。这种效率的优化就不得不去了解Sqlserver。
扒拉文档写完突然意识到这样死循环太消耗服务器资源了。很认真的思考了几天,发现可以在公共文件里调用这个过程万事大吉。
可是有个问题,如果长时间没人访问,服务端运行也会修改部分数据,下一个用户访问需要修改这部分数据,卡顿特别严重。
于是又加上了定时任务,两个小时执行一次。用server自带的计划任务就足够了。
回头看看,一个坑都没拉下,全都进去过了。
采集了部分QQ数据,入库后打算跟本地的Areamap关联,又熟悉了一遍。
走最远的路,才能看更多的风景。
drop procedure if exists U_M_R;#存储过程若存在,则删除!
create procedure U_M_R(n int)#更新用户地址 参数为地址列表最大省会Id值
begin
set @i=1;
while @i set @area_id=@i;#省会Id set @counts=(select count(*) from jiaoza_area where parent_id =@i or id=@i);#当前省内市的数量 set @a=0; repeat prepare one from "select left(name,2),id into @one,@areaid from jiaoza_area where parent_id =@i or id=@i limit ?,1";#获取省内市名称和id execute one USING @a; select * from jiaozi_member where nick like concat('%',@one,'%'); update jiaoza_member set address=@area_id where nick like concat('%',@one,'%'); #此处Mysql5.5以下存储过程limit的坑,没错不能直接@变量作为参数,当然5.5以后是可以哒,此处用了prepare,具体用法自行百度。饺砸是个好孩纸!萌哒哒~ set @a = @a + 1; until @a = @counts end repeat; set @i=@i+1; end while; end; call U_M_R(select max(id) from jiaoza_area where parent_id=0);