存储过程 清理数据/删除表/重命名表

简介:

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

Sql代码   收藏代码
  1. CREATE PROCEDURE Clear_Table_Data(  
  2.     DB_NAME varchar(50) # 数据库名称  
  3. )  
  4. BEGIN  
  5.   DECLARE done INT DEFAULT 0; #游标的标志位  
  6.   DECLARE a varchar(260);  
  7.   DECLARE b varchar(300);  
  8.   DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=DB_NAME ;  
  9.   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;  
  10.    
  11.   OPEN cur1;  
  12.   REPEAT  
  13.     FETCH cur1 INTO a;  
  14.     IF NOT done THEN  
  15.        set b=concat('Delete from ',DB_NAME,'.',a); # 拼删除命令  
  16.        # set b=concat('TRUNCATE from ',DB_NAME,'.',a); # 拼删除命令  
  17.        SET @E=b;  
  18.        PREPARE stmt1 FROM @E;  
  19.           EXECUTE stmt1; # 执行命令  
  20.           DEALLOCATE PREPARE stmt1; #释放对象  
  21.     END IF;  
  22.   UNTIL done END REPEAT;  
  23.   CLOSE cur1;  
  24. END;  

call Clear_Table_Data('wms_site_ks03');

Java代码   收藏代码
  1. CREATE PROCEDURE Drop_Db_Table(  
  2.     DB_NAME varchar(50),   # 数据库名称             
  3.     TB_PREFIX varchar(150) # 表前缀  
  4. )  
  5. BEGIN  
  6.   DECLARE done INT DEFAULT 0; #游标的标志位  
  7.   DECLARE a varchar(260);  
  8.   DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=DB_NAME AND table_name LIKE CONCAT(TB_PREFIX, '%');  
  9.   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;  
  10.    
  11.   OPEN cur1;  
  12.   REPEAT  
  13.     FETCH cur1 INTO a;  
  14.     IF NOT done THEN  
  15.        SET @E=concat('DROP TABLE ',DB_NAME,'.',a); # 拼删除命令  
  16.        PREPARE stmt1 FROM @E;  
  17.           EXECUTE stmt1; # 执行命令  
  18.           DEALLOCATE PREPARE stmt1; #释放对象  
  19.     END IF;  
  20.   UNTIL done END REPEAT;  
  21.   CLOSE cur1;  
  22. END;  

MySQL批量删除指定前缀表

Java代码   收藏代码
  1. #SHOW TABLES LIKE 'dede_%'  
  2. Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_name LIKE 'dede_%'  INTO  
  3. OUTFILE '/tmp/a.txt';  
  4. SOURCE /tmp/a.txt;  

另外一个就是批量修改表名:

Java代码   收藏代码
  1. Select CONCAT( 'ALTER TABLE ', table_name, ' RENAME TO ', table_name,';' ) FROM information_schema.tables Where table_name LIKE 'dede_%';  

 

 

相关文章
|
7月前
|
存储 SQL Oracle
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
68 0
|
存储 SQL Java
MySQL存储过程手册,及创建存储过程:循环为所有表添加字段
MySQL存储过程手册,及创建存储过程:循环为所有表添加字段
622 0
MySQL存储过程手册,及创建存储过程:循环为所有表添加字段
|
9月前
|
存储
SqlServer存储过程应用二:分页查询数据并动态拼接where条件 (下)
SqlServer存储过程应用二:分页查询数据并动态拼接where条件 (下)
|
9月前
|
存储 SQL 数据库连接
SqlServer存储过程应用二:分页查询数据并动态拼接where条件 (上)
SqlServer存储过程应用二:分页查询数据并动态拼接where条件
|
存储 SQL Go
SQL Server 删除数据库所有表和所有存储过程
SQL Server 删除数据库所有表和所有存储过程
116 0
|
存储 关系型数据库 MySQL
【MySQL】使用存储过程+IF控制语句批量添加数据
【MySQL】使用存储过程+IF控制语句批量添加数据
230 0
【MySQL】使用存储过程+IF控制语句批量添加数据
使用存储过程批量更新单表中的数据
使用存储过程批量更新单表中的数据
|
存储 关系型数据库 MySQL
mysql数据库编写存储过程实现批量插入1000万条数据
mysql数据库编写存储过程实现批量插入1000万条数据
629 0
mysql数据库编写存储过程实现批量插入1000万条数据
|
存储
基于存储过程实现批量复制表(Procedure)的方案实现
基于存储过程实现批量复制表(Procedure)的方案实现
573 0