在平臺上線前,會在數據庫裏寫入不少測試數據,到數據庫須要正式發佈的時候,這些測試的數據必須清理掉。數據庫裏若是隻有幾個表到是好說,一條 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; |
這個存儲過程借鑑了網上一位前輩的例子,只是這位前輩的數據庫可能沒有包含特殊字符的表名,但是個人數據庫有不少包含了特殊字符的表名,因此我在這位前輩的例子上進行了修改,這裏特別感謝這位不知姓名的前輩。這個存儲過程寫的實在是簡陋,若是那位網友有更好的,請必定要賜教在下。測試