Mysql定时执行任务实现方法

在开发过程中经常会遇到这样一个问题:

每天必须定时去执行一条sql语句 或更新或删除或执行特定的sql语句。

MySQL的客户端工具Navicat for MySQL提供了计划任务的形式,可以很好地实现该功能,而且也确实可行,比如像定时备份就做的很好。

然而当在执行的语句中包含有中文的时候,却无法定时执行了。


那么就想到用mysql的event计划任务去实现:


要想执行event事件,就必须保证mysql的版本的5.1.6以上,否则会报如下错误:



1、要想保证能够执行event事件,就必须保证定时器是开启状态,默认为关闭状态

set GLOBAL event_scheduler = 1;

或 

set GLOBAL event_scheduler = ON; 

 

要查看当前是否已开启事件调度器,可执行如下SQL:

SHOW VARIABLES LIKE 'event_scheduler'


2、如果原来存在该名字的任务计划则先删除  

drop event if exist upload_to_sdmp;


3、执行事件

event事件语法格式:

[sql]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <pre name="code" class="sql">CREATE EVENT [IF NOT EXISTS] event_name  
  2. ON SCHEDULE schedule  
  3. [ON COMPLETION [NOT] PRESERVE]  
  4. [ENABLE | DISABLE]  
  5. [COMMENT 'comment']  
  6. DO sql_statement;  
  7.   
  8. schedule:  
  9. AT TIMESTAMP [+ INTERVAL INTERVAL]  
  10. | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]  
  11.   
  12. INTERVAL:  
  13. quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |  
  14.             WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |  
  15.             DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}  

 例如: 
-- 设置时区并设置计划事件调度器开启,也可以 event_scheduler = ON

[sql]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. set time_zone = '+8:00';  
  2. set GLOBAL event_scheduler = 1;  
  3.   
  4. -- 设置该事件使用或所属的数据库base数据库  
  5. use test;  
  6.   
  7. # 如果原来存在该名字的任务计划则先删除  
  8. drop event if exists upload_to_sdmp;  
  9.   
  10. # 设置分隔符为 '$$' ,mysql默认的语句分隔符为 ';' ,这样在后续的 create 到 end 这段代码都会看成是一条语句来执行  
  11. DELIMITER $$  
  12. # 创建计划任务,设置第一次执行时间为'2014-07-30 10:00:00',并且每天执行一次  
  13. create event upload_to_sdmp   
  14. on schedule every 1 day starts timestamp '2014-07-30 10:00:00'  
  15. #on schedule every 1 SECOND  
  16. do  
  17.   
  18. # 开始该计划任务要做的事  
  19. begin  
  20.   
  21.   
  22. -- do something 编写你的计划任务要做的事  
  23.     INSERT aaa VALUES (3,'222');  
  24.     INSERT aaa VALUES (2,'222');  
  25.   
  26. -- 结束计划任务  
  27. end $$  
  28.   
  29. # 将语句分割符设置回 ';'  
  30. DELIMITER ;  

4、查询事件的运行状态


修改事件语法格式:

[sql]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. ALTER EVENT event_name  
  2. [ON SCHEDULE schedule]  
  3. [RENAME TO new_event_name]  
  4. [ON COMPLETION [NOT] PRESERVE]  
  5. [COMMENT 'comment']  
  6. [ENABLE | DISABLE]  
  7. [DO sql_statement]  


5、关闭\打开事件:

[sql]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. 关闭事件:  
  2. ALTER EVENT upload_to_sdmp DISABLE;  
[sql]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. 开启事件:  
  2. ALTER EVENT upload_to_sdmp ENABLE;    

6、查询事件是否开启

[sql]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. select * from mysql.event  


注意:真实的开发环境中,会遇到mysql服务重启或者断电的情况,此时则会出现事件调度器被关闭的情况,所有事件都不在起作用,要想解决这个办法,则需要在mysql.ini文件中加入event_scheduler = ON; 的语句


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值