MYSQL 定时自动执行EVENT

Mysql事件查看及定时器相关操作

    MySQL从5.1开始支持EVENT功能,类似Oracle和MSSQL的定时任务job功能。有了这个功能之后我们就可以让MySQL自动的执行存储过程来实现数据汇总等功能了,不用像以前哪样手动操作完成了。下面我们来测试下,在MYSQL中如何自动执行指定存储过程,实现相关功能。

要查看当前是否已开启事件调度器
SHOW VARIABLES LIKE ‘event_scheduler’;

 

一、创建测试表
CREATE TABLE EVENT_table(
id INT auto_increment PRIMARY KEY NOT NULL,
conent VARCHAR(80)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

开启事件查看器
SET GLOBAL event_scheduler = 1;

查看事件

 

创建事件
语法:
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT ‘comment’]
DO sql_statement;

SHOW EVENTS

二、创建调用存储过程
DROP PROCEDURE IF EXISTS pr_event;
CREATE PROCEDURE pr_event(
)
proc_start:BEGIN

实例:
CREATE EVENT updateInfoStatus
ON SCHEDULE EVERY 30 MINUTE
DO
UPDATE `jd_article` SET `status` = 0 WHERE `status` = 1 AND
`date` <= now( );

select * from mysql.event

INSERT INTO  EVENT_table(conent) VALUES (‘520’);

修改事件
语法:
ALTER EVENT event_name
[ON SCHEDULE schedule]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT ‘comment’]
[ENABLE | DISABLE]
[DO sql_statement]

 

END proc_start

实例:
ALTER EVENT updateInfoStatus
ON SCHEDULE EVERY 30 MINUTE
DO
UPDATE `jd_article` SET `status` = 0 WHERE `status` = 1 AND
`date` <= now( );

查看是否开启定时器

 

删除事件
DROP EVENTS IF EXISTS updateInfoStatus

SHOW VARIABLES LIKE ‘event_scheduler’;

三、创建事件调用存储过程

临时关闭事件
ALTER EVENTS updateInfoStatus DISABLE

开启定时器 0:off 1:on

创建事件语法:

开启事件
ALTER EVENTS updateInfoStatus ENABLE

SET GLOBAL event_scheduler = 1; .

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;

查看事件详细信息
SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME =
‘updateInfoStatus’ AND EVENT_SCHEMA = ‘jdwc’

删除

2、修改scheduler状态为打开(0:off  ,  1:on):
SHOW VARIABLES LIKE ‘event_scheduler’;–
查看是否开启定时器(OFF:关闭,ON:开启)

查看所有事件
SHOW EVENTS

drop  EVENT *_event;

打开定时器(四种方式):

查看事件创建信息
SHOW CREATE EVENT updateInfoStatus

创建

a、SET GLOBAL event_scheduler=ON;
b、SET @@global.EVENT_scheduler=ON;
c、SET GLOBAL event_scheduler=1;
d、SET @@global.event_scheduler=1;

作者 Zhou Hr

CREATE EVENT IF NOT EXISTS *_event_test

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可执行语句

SHOW VARIABLES
LIKE ‘event_scheduler’; 开启事件查看器 SET GLOBAL event_scheduler = 1;
创建事件 语法: CREATE EVENT [IF NO…

ON SCHEDULE  every 1 Hour

4、开启事件
ALTER EVENT ent_test ENABLE;

DO CALL update_*_proc(); 

5、临时关闭事件
ALTER EVENT ent_test DISABLE;

 

6、重命名事件并加上备注
ALTER EVENT test.ent_test RENAME TO ent_test_new COMMENT
‘重命名事件ent_test’;

或者

7、删除事件

CREATE EVENT IF NOT EXISTS update_*_event

DROP EVENT IF EXISTS ent_test;

ON SCHEDULE  every 1 DAY STARTS TIMESTAMP(CURRENT_DATE,’00:05:00′)

8、查看指定事件的详细信息

ON COMPLETION PRESERVE ENABLE

SELECT * FROM information_schema.EVENTS WHERE event_name=’ent_test’;

DO CALL update_*_proc(); 

SELECT * FROM information_schema.EVENTS WHERE event_name LIKE
CONCAT(‘%’,’ent_test’,’%’);

 

9、查看事件的创建SQL语句