mysql删除表数据保留表结构_一个MySQL清除数据库所有表数据保留表结构的存储过程...

在数据库上线前需要清除测试数据,当表数量众多时,手动清除变得困难。本文提供了一个MySQL存储过程,只需输入数据库名称,即可自动清空所有表数据,保留表结构。存储过程在5.1.44版本测试通过,适用于处理包含特殊字符表名的情况。
摘要由CSDN通过智能技术生成

在平台上线前,会在数据库里写入很多测试数据,到数据库需要正式发布的时候,这些测试的数据必须清理掉。数据库里如果只有几个表到是好说,一条 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;

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值