程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL定時任務event

MySQL定時任務event

編輯:MySQL綜合教程

MySQL定時任務event   由於一些業務需求,我們可能需要定時清除數據庫一些廢棄的數據,可以使用mysql的存儲過程和事件來完成。   下面例子定時清除日志表log中指定天數前的數據   1、創建日志表log

CREATE TABLE IF NOT EXISTS `log` (
  `log_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '記錄id',
  `user_id` int(11) DEFAULT NULL COMMENT '用戶id',
  `op` varchar(128) NOT NULL COMMENT '操作類型',
  `model` varchar(32) DEFAULT NULL COMMENT '操作模塊',
  `activity_time` int(10) NOT NULL DEFAULT '0' COMMENT '操作時間',
  `data` text COMMENT '數據',
  PRIMARY KEY (`log_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='用戶日志表' AUTO_INCREMENT=1 ;

 

  2、創建事件e_del_logs
CREATE EVENT `e_del_logs` ON SCHEDULE EVERY 1 DAY STARTS '2013-07-30 17:33:43' ON COMPLETION NOT PRESERVE ENABLE DO call p_del_logs(90);

 

//上面代碼表示從2013-07-30 17:33:43起每一天執行一次p_del_logs這個存儲過程,並帶上參數   3、建立存儲過程
p_del_logs
DELIMITER $$
--
-- 存儲過程
--
CREATE PROCEDURE `p_del_logs`(IN `date_inter` int)
BEGIN
    delete from log where (to_days(now()) - to_days(FROM_UNIXTIME(activity_time)))>=date_inter;
END$$
DELIMITER ;

 

//按事件傳過來的參數90,刪除操作時間90天之前的數據   這樣mysql就會定制每天去執行這個任務了。   查看當前是否已開啟事件計劃(調度器)有3種方法:
1)     SHOW VARIABLES LIKE 'event_scheduler';
2)     SELECT @@event_scheduler;
3)     SHOW PROCESSLIST;

 

  (二)  開啟事件計劃(調度器)開關有4種方法:
1)     SET GLOBAL event_scheduler = 1;
2)     SET @@global.event_scheduler = 1;
3)     SET GLOBAL event_scheduler = ON;
4)     SET @@global.event_scheduler = ON;

 

鍵值1或者ON表示開啟;0或者OFF表示關閉;   (三)  事件開啟與關閉:
開啟某事件:ALTER EVENT e_del_logs ON COMPLETION PRESERVE ENABLE;
關閉某事件:ALTER EVENT e_del_logs ON COMPLETION PRESERVE DISABLE;

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved