在做开发的过程中,会往数据库里写入很多测试的垃圾数据,到数据库需要正式发布的时候,这些测试数据必须清理掉。前面有同事用一条条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;
|
阅读(1373) | 评论(0) | 转发(0) |