mysql通過執行sql刪除指定資料庫的所有表
阿新 • • 發佈:2018-12-22
原理: 通過儲存過程遍歷獲取指定資料庫的表名稱,然後執行刪除語句,刪除完成後將刪除該儲存過程。
預設刪除為當前使用的資料庫,可在第一行SET @table_schema = null
指定其他要刪除的資料庫。
完整程式碼如下
SET @table_schema = null; #指定當前要刪除所有表的資料庫名稱,為null或''時預設為當前資料庫,反之為指定的資料庫 DROP PROCEDURE IF EXISTS dropAllTables; ##刪除指定資料庫的所有表## CREATE PROCEDURE dropAllTables(in current_table_schema VARCHAR(255)) BEGIN #current_table_schema為資料庫名稱 DECLARE delete_text VARCHAR(255); DECLARE delete_total INT; ##建立接收遊標資料的變數 DECLARE current_table_name VARCHAR(255); #建立結束標誌變數 DECLARE done INT DEFAULT false; #建立遊標 DECLARE cursor_index CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = current_table_schema; #指定遊標迴圈結束時的返回值 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true; #設定初始值 SET delete_total = 0; SET delete_text = '刪除執行完成'; IF (current_table_schema is null or current_table_schema = "") THEN SELECT database() INTO current_table_schema; END IF; #開啟遊標 OPEN cursor_index; #開始循環遊標裡的資料 read_loop:loop #根據遊標當前指向的一條資料 FETCH cursor_index INTO current_table_name; #判斷遊標的迴圈是否結束 IF done THEN LEAVE read_loop; #跳出遊標迴圈 END IF; #獲取一條資料時,進行累加操作 SET delete_total = delete_total + 1; #執行刪除表操作 SET @select_drop = CONCAT(' DROP TABLE IF EXISTS ', current_table_schema, ".", current_table_name); PREPARE pr FROM @select_drop; EXECUTE pr; #執行pr DROP PREPARE pr; SELECT @select_drop as drop_sql; #結束遊標迴圈 END LOOP; #關閉遊標 CLOSE cursor_index; IF (delete_total = 0) THEN SET delete_text = '當前未刪除任何表'; END IF; SELECT current_table_schema as delete_database, delete_text, delete_total; END; CALL dropAllTables(@table_schema); DROP PROCEDURE IF EXISTS dropAllTables;```