MYSQL 定时自动执行EVENT
MySQL从5.1开始支持EVENT功能,类似Oracle和MSSQL的定时任务job功能。有了这个功能之后我们就可以让MySQL自动的执行存储过程来实现数据汇总等功能了,不用像以前哪样手动操作完成了。下面我们来测试下,在MYSQL中如何自动执行指定存储过程,实现相关功能。
一、创建测试表
CREATE TABLE EVENT_table(
id INT auto_increment PRIMARY KEY NOT NULL,
conent VARCHAR(80)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
二、创建调用存储过程
DROP PROCEDURE IF EXISTS pr_event;
CREATE PROCEDURE pr_event(
)
proc_start:BEGIN
INSERT INTO EVENT_table(conent) VALUES ('520');
END proc_start
三、创建事件调用存储过程
创建事件语法:
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE SCHEDULE
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
要使定时事件起作用,MySQL的常量GLOBAL event_scheduler必须为on或者是1。
1、查看scheduler的当前状态:
a、SHOW VARIABLES LIKE 'event_scheduler';
b、SELECT @@event_scheduler;
2、修改scheduler状态为打开(0:off , 1:on):
SHOW VARIABLES LIKE 'event_scheduler';-- 查看是否开启定时器(OFF:关闭,ON:开启)
打开定时器(四种方式):
a、SET GLOBAL event_scheduler=ON;
b、SET @@global.EVENT_scheduler=ON;
c、SET GLOBAL event_scheduler=1;
d、SET @@global.event_scheduler=1;
3、创建事件,设置每10分钟执行一次(调用pr_event存储过程)。
CREATE EVENT IF NOT EXISTS ent_test
ON SCHEDULE EVERY 10 MINUTE
-- ON COMPLETION PRESERVE -- 当EVENT到期时,EVENT会被disable,但是该EVENT还是会存在
-- ON COMPLETION NOT PRESERVE -- 当EVENT到期时,该EVENT会被自动删掉,该项为默认值
DO CALL pr_event(); -- pr_event()为需要定时处理的存储过程,这里也可以改成相关SQL可执行语句
4、开启事件
ALTER EVENT ent_test ENABLE;
5、临时关闭事件
ALTER EVENT ent_test DISABLE;
6、重命名事件并加上备注
ALTER EVENT test.ent_test RENAME TO ent_test_new COMMENT '重命名事件ent_test';
7、删除事件
DROP EVENT IF EXISTS ent_test;
8、查看指定事件的详细信息
SELECT * FROM information_schema.EVENTS WHERE event_name='ent_test';
SELECT * FROM information_schema.EVENTS WHERE event_name LIKE CONCAT('%','ent_test','%');
9、查看事件的创建SQL语句
SHOW CREATE EVENT ent_test;
四、一些典型应用示例:
1、从现在开始每隔九天定时执行
CREATE EVENT EVENT1
ON SCHEDULE EVERY 9 DAY STARTS NOW()
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
CALL TOTAL();
END
2、每个月的一号凌晨1 点执行
CREATE EVENT EVENT2
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
BEGIN
CALL STAT();
END
3、每个季度一号的凌晨2点执行
CREATE EVENT TOTAL_SEASON_EVENT
ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR)
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
CALL SEASON_STAT();
END
4、每年1月1号凌晨四点执行
CREATE EVENT TOTAL_YEAR_EVENT
ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 4 HOUR)
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
CALL YEAR_STAT();
END
MySQL的event和Oralce的Job还是有点不同的,这点让笔者比较困扰
5、在进行按月,季,年进行自动调用存储过程时,为了测试可以把系统改为年的最后一天,如2010-12-31 23:59:55;
这个Oracle的Job就会把月,季,年存储过程执行一遍。但MySQL改了系统时间了Event也没有定时执行。不知道各位大虾有没有什么好办法?可以解决这个问题。
五、查看事件运行基本信息
SELECT * FROM information_schema.events ORDER BY last_executed DESC
本文参考:http://www.jz123.cn/text/1134105.html
http://blog.sina.com.cn/s/blog_5ceb51480101ndab.html
MYSQL 定时自动执行EVENT的更多相关文章
- mysql定时脚本(event),类似oracle的job
mysql定时脚本(event),类似oracle的job 我有2张表:tb_push_data 和 tb_push_data_log 现在需要每隔一段时间将tb_push_data 符合条件的 ...
- 转 Windows 7设置定时自动执行任务方法
在使用电脑的时候可能会遇到一些需要无人值守让电脑自行执行任务后定时关机的情形,在Win7系统中,我们可以使用"任务计划"设置功能结合 shutdown命令灵活设置任务计划,让Win ...
- SQL server 定时自动执行SQL存储过程
当一个存储过程是为了生成报表,并且是周期性的,则不需要人工干预,由SQL作业定时自动执行些SQL存储过程即可. 本示例,假设已需要定时执行的存储过程为:Pr_test 工具/原料 SQL Server ...
- Linux中的定时自动执行功能(at,crontab)
Linux中的定时自动执行功能(at,crontab) 概念 在Linux系统中,提供了两种提前对工作进行安排的方式 at 只执行一次 crontab 周期性重复执行 通过对这两个工具的应用可以让我们 ...
- windows下apache及mysql定时自动重启设置
有时候觉得,服务器运行时间过长,造成服务器内存等压力过大.因此,不用重新启动服务器的情况下,完成apache和mysql的内存释放,是非常有益处的(把重启时间设置在访问量最低的).首先,apache的 ...
- 服务器上定时自动执行php
两种方式: 一.Linux 服务器Linux原生支持crontab,所以可以利用这一功能做定时任务 步骤: 1.编辑crontab文件:Linux:crontab -e 2.输入代码:0 0 * * ...
- Linux下mysql定时自动备份并FTP到远程脚本
1.添加backupmysqleveryday.sh(vi /data/shell/backupmysqleveryday.sh) #!/bin/sh #this shell is user for ...
- windows系统mysql定时自动备份
MySQL Administrator 工具是MySQL官方的数据库管理工具,包含在MySQL GUI Tools中,可在MySQL官方网站下载到,下载地址:http://dev.mysql.com/ ...
- php定时自动执行 需启动第一次
1 2 3 4 5 6 7 8 9 10 11 12 <? ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行. set_time_li ...
随机推荐
- ArcEngine 数据导入经验(转载)
转自原文ArcEngine 数据导入经验(转载) (一) GIS系统数据是基础,想必大家在做ArcEngine二次开发的过程中都会遇到向MDB和SDE写入数据的工作,我们将会通过几个篇幅,从大数据量导 ...
- [Angular] Auxiliary named router outlets
Define a auxilliary router: export const ROUTES: Routes = [ { path: 'folder/:name', component: MailF ...
- [Angular Directive] Write a Structural Directive in Angular 2
Structural directives enable you to use an element as a template for creating additional elements. C ...
- js进阶 11-3 jquery中css属性如何操作
js进阶 11-3 jquery中css属性如何操作 一.总结 一句话总结:通过css()方法 1.attr和css是有交叉的,比如width,两者中都可以设置,那么他们的区别是什么? 其实通俗一点 ...
- 【codeforces 760A】Petr and a calendar
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- easyexcel 读写测试
<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId> ...
- Java数组课后习题
package javafirst; import java.util.Arrays; class Show{ public void showArray(int[] arr){ for(int i ...
- Eclipse使用技巧总结(六)
四十.增量查找 Ctrl + J : Ctrl + Shift + J: 四十一.快速跳到某行 Ctrl + L 四十二.快速比较不同 Window-->Preference___查找quick ...
- WPF 高性能笔
原文:WPF 高性能笔 本文告诉大家WPF的INK的实现,和如何做一个高性能的笔. 高性能的笔迹在 WPF 包含两个部分,一个是就是输入,第二个就是渲染. 如果需要经过路由事件才收到输入,如果有人在路 ...
- Qt中(图片)资源的三种使用方式
Qt中使用图片资源的方法有很多种,以前我一直分不清各种之间的区别和Qt相应的处理机制,后来遇到一些实际的问题,然后再加上查阅源码和资料,总算弄明白一些事情,但是本文仅仅是个人理解,如有错误之处请告诉我 ...