使用存储过程,删除分表
USE tobresume; #数据库名称,过程存储依赖于数据库生效.
DROP PROCEDURE IF EXISTS Del_tables; #如果已有该存储过程则删除旧的
DELIMITER $$ #定义临时分隔符
CREATE PROCEDURE Del_tables() #创建存储过程
BEGIN #存储过程开始
#定义变量名称和类型
DECLARE db_name VARCHAR(20);
DECLARE table_name VARCHAR(20);
DECLARE table_pro CHAR(18);
DECLARE sql_text VARCHAR(3000);
DECLARE i INT;
DECLARE j VARCHAR(2);
#对变量进行赋值
SET db_name='tobresume';
SET table_name='';
SET table_pro = '_talent_dir_resume';
SET sql_text='';
SET i=0;
SET i='';
#通过遍历,生成129张分表的前缀
WHILE i<=128 DO
IF i<10 THEN
SET j=CONCAT('0',i);
ELSE
SET j=LPAD(LCASE(HEX(i)),2,'0');
END IF;
#拼接分表名称
SET table_name=CONCAT(j,table_pro);
#拼接删除分表的SQL语句
SET sql_text=CONCAT('DROP TABLE IF EXISTS ', db_name,'.',table_name,';');
#执行SQL语句
SELECT sql_text;
SET @sql_text=sql_text;
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
#准备进入下一轮循环
SET i=i+1;
#结束循环
END WHILE;
#存储过程结束
END$$
#恢复分隔符
DELIMITER ;
#调用存储过程并执行
call Del_tables();
结果:
...
+------------------------------------------------------+
| sql_text |
+------------------------------------------------------+
| DROP TABLE IF EXISTS tobresume.7f_talent_dir_resume; |
+------------------------------------------------------+
1 row in set (9.32 sec)
+------------------------------------------------------+
| sql_text |
+------------------------------------------------------+
| DROP TABLE IF EXISTS tobresume.80_talent_dir_resume; |
+------------------------------------------------------+
1 row in set (9.37 sec)
Query OK, 0 rows affected (9.42 sec)
删除129张表共耗时9.42秒,效率还是挺高的。