使用存儲過程,刪除分表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