因爲一些業務需求,咱們可能須要定時清除數據庫一些廢棄的數據,能夠使用mysql的存儲過程和事件來完成。
下面例子定時清除日誌表log中指定天數前的數據 mysql
一、建立日誌表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 ; sql
二、建立事件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這個存儲過程,並帶上參數 數據庫
三、創建存儲過程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天以前的數據 spa
這樣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表示關閉; it
(三) 事件開啓與關閉:
開啓某事件:ALTER EVENT e_del_logs ON COMPLETION PRESERVE ENABLE;
關閉某事件:ALTER EVENT e_del_logs ON COMPLETION PRESERVE DISABLE; event