文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>一个MySQL清除数据库所有表数据保留..

一个MySQL清除数据库所有表数据保留..

时间:2010-10-03  来源:crown_prince

        在平台上线前,会在数据库里写入很多测试数据,到数据库需要正式发布的时候,这些测试的数据必须清理掉。数据库里如果只有几个表到是好说,一条 truncate 命令一个一个清除,但是如果数据库里有成百上千个表,那么这样一个一个的清除既费时也变成了不可能完成的任务了。于是硬着头皮思考能否做成一个通用的存储过程,只需要输入需要清理的数据库名称,就能自动清除所有的测试数据呢?于是打开手册现学现用,用了一晚上时间加google和baidu写了下面这个存储过程,这个存储过程在5.1.44-log MySQL Community Server (GPL)版本测试通过。

清除数据的存储过程内容如下:

 CREATE PROCEDURE Clear_DB(
        DB_NAME varchar(50)  # 数据库名称
  )
BEGIN
  DECLARE done INT DEFAULT 0;  #游标的标志位
  DECLARE name varchar(50);
  DECLARE cmd varchar(50);
  DECLARE tb_name CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=DB_NAME;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
 
  OPEN tb_name;
  REPEAT
    FETCH tb_name INTO name;
    IF NOT done THEN
       #set cmd=concat('Delete from ',DB_NAME,'.','`',`name`,'`');
       set cmd=concat('TRUNCATE table ',DB_NAME,'.','`',`name`,'`');  # 拼删除命令
       SET @E=cmd;
       PREPARE stmt FROM @E;
          EXECUTE stmt; 
          DEALLOCATE PREPARE stmt; 
    END IF;
  UNTIL done END REPEAT;
  CLOSE tb_name;
END;
 

        这个存储过程借鉴了网上一位前辈的例子,只是这位前辈的数据库可能没有包含特殊字符的表名,可是我的数据库有很多包含了特殊字符的表名,所以我在这位前辈的例子上进行了修改,这里特别感谢这位不知姓名的前辈。这个存储过程写的实在是简陋,如果那位网友有更好的,请一定要赐教在下。

相关阅读 更多 +
排行榜 更多 +
火柴人战争血腥打击

火柴人战争血腥打击

飞行射击 下载
沉浸式射击比赛

沉浸式射击比赛

飞行射击 下载
银河世界

银河世界

飞行射击 下载