1. 程式人生 > >mysql通過執行sql刪除指定資料庫的所有表

mysql通過執行sql刪除指定資料庫的所有表

原理: 通過儲存過程遍歷獲取指定資料庫的表名稱,然後執行刪除語句,刪除完成後將刪除該儲存過程。
預設刪除為當前使用的資料庫,可在第一行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;```