SCADA採集系統須要將實時數據存入歷史表。問題1:如何更簡單的添加歷史數據?2.海量歷史數據,好比年數據,如何快速篩選 畫曲線?mysql
每個月備份歷史表,而且將原表清空。每一個月1號凌晨1點,將歷史表備份,名稱命名爲his_aic_20190501 01:00,將原表清空。sql
BEGIN INSERT INTO his_dic (ParentID,PointID,DICName,DICValue,StateDesc,AlarmThreshold,AlarmLevel,AlarmEnable,UpdatedTime) select ParentID,PointID,DICName,DICValue,StateDesc,AlarmThreshold,AlarmLevel,AlarmEnable,UpdatedTime FROM dic on duplicate key update ParentID=VALUES( ParentID),PointID=VALUES(PointID ),DICName=VALUES(DICName ),DICValue=VALUES(DICValue ),StateDesc=VALUES(StateDesc ),AlarmThreshold=VALUES( AlarmThreshold),AlarmLevel=VALUES(AlarmLevel ),AlarmEnable=VALUES( AlarmEnable),UpdatedTime=VALUES(UpdatedTime ); INSERT INTO his_doc (ParentID,PointID,DOCName,DetectDOStatus,DOCValue,StateDesc,ControlEnable,UpdatedTime) SELECT ParentID,PointID,DOCName,DetectDOStatus,DOCValue,StateDesc,ControlEnable,UpdatedTime FROM doc on duplicate key update ParentID=VALUES(ParentID ),PointID=VALUES(PointID ),DOCName=VALUES(DOCName ),DetectDOStatus=VALUES( DetectDOStatus),DOCValue=VALUES(DOCValue ),StateDesc=VALUES(StateDesc ),ControlEnable=VALUES( ControlEnable),UpdatedTime=VALUES(UpdatedTime ); INSERT INTO his_aic (ParentID,PointID,AICName,AICValue,Unit,sAICValue,MaxAICValue,MinAICValue,`Enable`,UpdatedTime) SELECT ParentID,PointID,AICName,AICValue,Unit,sAICValue,MaxAICValue,MinAICValue,`Enable`,UpdatedTime FROM aic on duplicate key update ParentID=VALUES(ParentID ),PointID=VALUES(PointID ),AICName=VALUES(AICName ),AICValue=VALUES( AICValue),Unit=VALUES(Unit ),sAICValue=VALUES(sAICValue ),MaxAICValue=VALUES(MaxAICValue ),MinAICValue=VALUES(MinAICValue ),`Enable`=VALUES( `Enable`),UpdatedTime=VALUES(UpdatedTime); END
步驟1 使用navicat工具管理Mysql,函數右鍵新建函數,在跳出得嚮導框選擇過程,點擊下一步。函數
步驟2 這裏不須要任何操做,直接點擊完成,由於沒有參數傳入傳出。工具
步驟3 將上面的存儲過程代碼複製進以下圖框,點擊運行便可。code
步驟4點擊保存,輸入名稱。blog
結果運行結果以下。事件
CREATE EVENT if not exists event_To_His on schedule every 1 hour on completion preserve do call To_His();
步驟1選擇本身的數據,點擊右鍵,選擇cmd模式輸入。cmd
步驟2將以上代碼拷貝運行便可。it
結果運行結果以下。io
備註:
若是報錯查看event是否開啓: show variables like '%sche%';
將事件計劃開啓: set global event_scheduler=1;
關閉事件任務: alter event e_test ON COMPLETION PRESERVE DISABLE;
開戶事件任務: alter event e_test ON COMPLETION PRESERVE ENABLE;
BEGIN create table his_aic_temp like his_aic; set @i=now(); set @sqlstr=CONCAT('rename table his_aic to `his_aic_',cast(@i as char),'`'); select @sqlstr; PREPARE renameHisBak FROM @sqlstr; EXECUTE renameHisBak; rename table his_aic_temp to his_aic; create table his_dic_temp like his_dic; set @i=now(); set @sqlstr=CONCAT('rename table his_dic to `his_dic_',cast(@i as char),'`'); select @sqlstr; PREPARE renameHisBak FROM @sqlstr; EXECUTE renameHisBak; rename table his_dic_temp to his_dic; create table his_doc_temp like his_doc; set @i=now(); set @sqlstr=CONCAT('rename table his_doc to `his_doc_',cast(@i as char),'`'); select @sqlstr; PREPARE renameHisBak FROM @sqlstr; EXECUTE renameHisBak; rename table his_doc_temp to his_doc; END
詳見1.2
CREATE DEFINER=`root`@`localhost` EVENT `event_HistoryBak` ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),INTERVAL 1 MONTH),INTERVAL 1 HOUR) ON COMPLETION PRESERVE ENABLE DO call HistoryBak();
詳見2.2
QQ羣:20120449