MySQL 5.1新特性之事件调度器(Event Scheduler)

一、前言

自MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。

实例一:
显示存储过程:show procedure status; 
删除存储过程:drop procedure proc_name;  // proc_name 存储过程名称

查看event是否开启: show variables like '%sche%'; 
将事件计划开启: set global event_scheduler=1; 或set global event_scheduler=ON; 

关闭事件任务: alter event e_update_loginout_time ON COMPLETION PRESERVE DISABLE; 
开户事件任务: alter event e_update_loginout_time ON COMPLETION PRESERVE ENABLE; 

定义存储过程update_loginout_time

 delimiter //
 CREATE PROCEDURE update_loginout_time () 
 BEGIN 
 update tbl_user_role SET logoutTime = now() where roleId = 1029;
 END; 
 //

 创建event e_update_loginout_time 
 CREATE EVENT if not exists e_update_loginout_time 
 on schedule every 60 second 
 on completion preserve 
 do call update_loginout_time(); 

 每隔60秒将执行存储过程update_loginout_time,将当前时间更新到tbl_user_role表中roleId = 1029的记录的logoutTime字段中去(登出时间).

实例二:
/** 查看event是否开启 */
show variables like '%sche%'; 
/** 将事件计划开启 set global event_scheduler=1;*/
set global event_scheduler=ON; 
/** 定义存储过程,删除行为日志*/
delimiter //
 CREATE PROCEDURE delete_action_log (in date_inter integer)
 BEGIN 
 DELETE from tbl_Log_action where TO_DAYS(SYSDATE()) - TO_DAYS(createDate) > date_inter;
 END; 
 //

/** 创建操作event事件,从2015-03-17凌晨2点50操作删除6天前日志,每日循环执行 */
CREATE EVENT if not exists e_delete_action_log 
on schedule every 1 DAY STARTS '2015-03-17 02:50:00'
on completion preserve enable
do call delete_action_log(60); 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值