使用存储过程删除文件相关记录

2009-08-21 14:15:43 作者:allniu 来源:www.allniu.com 浏览次数:0 网友评论 0

采用存储过程删除文件的相关记录
在文件系统,所有的数据往往依赖于文件主表,要想彻底删除文件,就要将文件的相关的记录一并删除掉,例如,文件评论记录,文件举报记录等一并删除掉,采用传统的SQL语句,往往要一条条SQL单独执行,而采用存储过程,可以很方便的实现,并且便于维护。
for example:
CREATE PROCEDURE delfilemgr(fileid int,deltime datetime,delip char(16))
BEGIN
declare filesize,fileuserid int;
declare filename,fileurl varchar(255);
declare filedec text;
declare filetype varchar(50);
DECLARE cur CURSOR FOR SELECT wj_name, wj_describe, wj_size, wj_type,wj_url, wj_userid FROM T_WP_ZY_WJ;
OPEN cur;
FETCH cur into filename,filedec,filesize,filetype, fileurl, fileuserid;
INSERT INTO T_WP_ZY_WJSC(wj_id, wj_name, wj_describe, wj_size, wj_type,wj_url, wj_userid, wj_delete_time, wj_del_ip) values (fileid,filename,filedec,filesize, filetype, fileurl, fileuserid, deltime,delip);
CLOSE cur;
UPDATE T_WP_PZ SET pz_leave_space = pz_leave_space+filesize WHERE pz_userid = fileuserid;
DELETE FROM T_WP_WJ_JB WHERE jb_wjid = fileid;
DELETE FROM T_SQ_QZ_HTHF WHERE hthf_zy_id = fileid;
DELETE FROM T_WP_ZY_YHBQGX WHERE yhzybqgx_wjid = fileid;
DELETE FROM T_WP_ZY_GXGX WHERE gxgx_wjid = fileid;
DELETE FROM T_WP_WJ_LJLL WHERE ljll_wjid = fileid;
DELETE FROM T_WP_ZY_WJ WHERE wj_id = fileid;
END


上面为一删除文件的存储过程,先将文件复制到文件备份表中,然后删除其相关表中的记录.
要点解释:
CREATE PROCEDURE delfilemgr(fileid int,deltime datetime,delip char(16))    //创建存储过程,并定义要传入的参数;
declare  //定义存储过程中的一些变量;
DECLARE cur CURSOR FOR  //创建游标,将值存入游标;
FETCH cur into    //游标赋值;

存储过程的执行权限问题:
存储过程默认的执行权限为--存储过程的创建者,对于多用户数据库而言,应当注意这点,如是普通用户创建,即使 root 用户执行,同样也是不具备执行权限。
用户可以根据安全需求进行相应的调整,可以将权限设置为 INVOKER ,为命令的一般请求者,当然要而安全而定。

本文章为 http://www.allniu.com 管理员原创,很高兴能和大家一起分享,如有转载,请注明出处
关键词:mysql存储过程

[错误报告] [收藏] [打印] [关闭] [返回顶部]

最新图片文章

最新文章