一個MySQL清除數據庫全部表數據保留表結構的存儲過程

        在平臺上線前,會在數據庫裏寫入不少測試數據,到數據庫須要正式發佈的時候,這些測試的數據必須清理掉。數據庫裏若是隻有幾個表到是好說,一條 truncate 命令一個一個清除,可是若是數據庫裏有成百上千個表,那麼這樣一個一個的清除既費時也變成了不可能完成的任務了。因而硬着頭皮思考可否作成一個通用的存儲過程,只須要輸入須要清理的數據庫名稱,就能自動清除全部的測試數據呢?因而打開手冊現學現用,用了一夜時間加google和baidu寫了下面這個存儲過程,這個存儲過程在5.1.44-log MySQL Community Server (GPL)版本測試經過。數據庫

清除數據的存儲過程內容以下:ide

 CREATE PROCEDURE Clear_DB(
        DB_NAME varchar(50)  # 數據庫名稱
  )
BEGIN
  DECLARE done INT DEFAULT 0;  #遊標的標誌位
  DECLARE name varchar(50);
  DECLARE cmd varchar(50);
  DECLARE tb_name CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=DB_NAME;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
 
  OPEN tb_name;
  REPEAT
    FETCH tb_name INTO name;
    IF NOT done THEN
       #set cmd=concat('Delete from ',DB_NAME,'.','`',`name`,'`');
       set cmd=concat('TRUNCATE table ',DB_NAME,'.','`',`name`,'`');  # 拼刪除命令
       SET @E=cmd;
       PREPARE stmt FROM @E;
          EXECUTE stmt; 
          DEALLOCATE PREPARE stmt; 
    END IF;
  UNTIL done END REPEAT;
  CLOSE tb_name;
END;

 

        這個存儲過程借鑑了網上一位前輩的例子,只是這位前輩的數據庫可能沒有包含特殊字符的表名,但是個人數據庫有不少包含了特殊字符的表名,因此我在這位前輩的例子上進行了修改,這裏特別感謝這位不知姓名的前輩。這個存儲過程寫的實在是簡陋,若是那位網友有更好的,請必定要賜教在下。測試

相關文章
相關標籤/搜索