查看: 499|回复: 1

MYSQL--清理测试数据的存储过程

 关闭 [复制链接]

签到天数: 2592 天

连续签到: 6 天

[LV.Master]至尊海神IIIIII

发表于 2010-7-20 23:43 | 显示全部楼层 |阅读模式
MYSQL--清理测试数据的存储过程



在做开发的过程中,会往数据库里写入很多测试的垃圾数据,到数据库需要正式发布的时候,这些测试数据必须清理掉。前面有同事用一条条delete 命令,组合成一个SQL文件去执行,很冗长,也很繁琐。于是思考能否做成一个通用的存储过程,只需要传入需要清理的数据库名称,然后自动清除所有的测试数据呢?晚上找时间写了如下的存储过程,在MYSQL5.1.42版本测试通过。

CREATE PROCEDURE Clear_DB(
        DB_NAME varchar(50) # 数据库名称
  )
BEGIN
  DECLARE done INT DEFAULT 0; #游标的标志位
  DECLARE a varchar(20);
  DECLARE b varchar(20);
  DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=DB_NAME ;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

  OPEN cur1;
  REPEAT
    FETCH cur1 INTO a;
    IF NOT done THEN
       set b=concat('Delete from ',DB_NAME,'.',a); # 拼删除命令
       # set b=concat('TRUNCATE from ',DB_NAME,'.',a); # 拼删除命令
       SET @E=b;
       PREPARE stmt1 FROM @E;
          EXECUTE stmt1; # 执行命令
          DEALLOCATE PREPARE stmt1; #释放对象
    END IF;
  UNTIL done END REPEAT;
  CLOSE cur1;
END;
<
PCOS系统下载站:http://zhuangji.wang

签到天数: 1036 天

连续签到: 0 天

[LV.10]逍遥海仙III

发表于 2010-7-21 09:25 | 显示全部楼层
来了解下了
PCOS系统下载站:http://zhuangji.wang
回复 支持 反对

使用道具 举报

本版积分规则