mysql 备份大表 存储过程_mysql批量备份表的存储过程写法
1.在工作會遇到這種情況,mysql數據庫,系統涉及到備份多表數據,為了方便,用存儲過程來實現此功能,同時也復習一下存儲過程的寫法,同時記錄下方便以后擴展修改
2.存儲過程代碼如下
-- 創建存儲過程
CREATE PROCEDURE test_01()
BEGIN
-- 定義變量
DECLARE s int DEFAULT 0;
DECLARE monitorTable varchar(255);
DECLARE countTable varchar(256);
DECLARE countTableNew varchar(256);
-- 定義游標,并將sql結果集賦值到游標中
DECLARE report CURSOR FOR select DISTINCT monitor_table,count_table from t_monitorinfo ;
-- 聲明當游標遍歷完后將標志變量置成某個值
DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
-- 打開游標
open report;
-- 將游標中的值賦值給變量,注意:變量名不要和返回的列名同名,變量順序要和sql結果列的順序一致
fetch report into monitorTable,countTable;
-- 當s不等于1,也就是未遍歷完時,會一直循環
while s<>1 do
-- 執行業務邏輯
set countTableNew = concat(countTable,'_bak');
-- 表名是參數的語法
SET @STMT =CONCAT("CREATE TABLE ",countTableNew," LIKE ",countTable,";");
PREPARE STMT FROM @STMT;
EXECUTE STMT;
SET @STMT2 =CONCAT("INSERT INTO ",countTableNew," SELECT * FROM ",countTable,";");
PREPARE STMT2 FROM @STMT2;
EXECUTE STMT2;
-- 表名非參數的語法
-- update patrolreporthistory set reportUrl = CONCAT('patrolReport.html?monitorId=',substring(report_url,15,1),'&reportId=',report_id) where reportId=report_id;
-- 將游標中的值再賦值給變量,供下次循環使用
fetch report into monitorTable,countTable;
-- 當s等于1時表明遍歷以完成,退出循環
end while;
-- 關閉游標
close report;
END;
總結
以上是生活随笔為你收集整理的mysql 备份大表 存储过程_mysql批量备份表的存储过程写法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab连续信号离散化_MATLAB
- 下一篇: php mysql update语句_m