批量刪除分表

使用存儲過程,刪除分表sql

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秒,效率仍是挺高的。bash

相關文章
相關標籤/搜索