Home  >  Article  >  Database  >  mysql 定时执行存储过程_MySQL

mysql 定时执行存储过程_MySQL

WBOY
WBOYOriginal
2016-05-31 08:50:011178browse

查看event是否开启: show variables like '%sche%'; 

将事件计划开启: set global event_scheduler=1; 

关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE; 

开户事件任务: alter event e_test ON COMPLETION PRESERVE ENABLE; 

简单实例. 

创建表 CREATE TABLE test(endtime DATETIME); 

创建存储过程test 

CREATE PROCEDURE test () 

BEGIN 

update examinfo SET endtime = now() WHERE id = 14; 

END; 

创建event e_test 

CREATE EVENT if not exists e_test 

on schedule every 30 second 

on completion preserve 

do call test(); 

每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去 

1) 首先来看一个简单的例子来演示每秒插入一条记录到数据表 

USE test; 

CREATE TABLE aaa (timeline TIMESTAMP); 

CREATE EVENT e_test_insert 

ON SCHEDULE EVERY 1 SECOND 

DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP); 

等待3秒钟后,再执行查询看看: 

copyright dedecms

mysql> SELECT * FROM aaa; 

+———————+ 

| timeline | 

+———————+ 

| 2007-07-18 20:44:26 | 

| 2007-07-18 20:44:27 | 

| 2007-07-18 20:44:28 | 

+———————+ 

2) 5天后清空test表: 

CREATE EVENT e_test 

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY 

DO TRUNCATE TABLE test.aaa; 

3) 2007年7月20日12点整清空test表: 

CREATE EVENT e_test 

ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00' 

DO TRUNCATE TABLE test.aaa; 

4) 每天定时清空test表: 

CREATE EVENT e_test 

ON SCHEDULE EVERY 1 DAY 

DO TRUNCATE TABLE test.aaa; 

5) 5天后开启每天定时清空test表: 

CREATE EVENT e_test 

ON SCHEDULE EVERY 1 DAY 

STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY 

DO TRUNCATE TABLE test.aaa; 

6) 每天定时清空test表,5天后停止执行: 

CREATE EVENT e_test 

ON SCHEDULE EVERY 1 DAY 

ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY 

DO TRUNCATE TABLE test.aaa; 

7) 5天后开启每天定时清空test表,一个月后停止执行: 本文来自织梦

 

CREATE EVENT e_test 

ON SCHEDULE EVERY 1 DAY 

STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY 

ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH 

DO TRUNCATE TABLE test.aaa; 

[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。 

8) 每天定时清空test表(只执行一次,任务完成后就终止该事件): 

CREATE EVENT e_test 

ON SCHEDULE EVERY 1 DAY 

ON COMPLETION NOT PRESERVE 

DO TRUNCATE TABLE test.aaa; 

[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。 

[COMMENT ‘comment’]可以给该事件加上注释。 

三、修改事件(ALTER EVENT) 

ALTER EVENT event_name 

[ON SCHEDULE schedule] 

[RENAME TO new_event_name] 

[ON COMPLETION [NOT] PRESERVE] 

[COMMENT 'comment'] 

[ENABLE | DISABLE] 

[DO sql_statement] 

1) 临时关闭事件 

ALTER EVENT e_test DISABLE; 

2) 开启事件 

ALTER EVENT e_test ENABLE; 

3) 将每天清空test表改为5天清空一次: 

ALTER EVENT e_test 

ON SCHEDULE EVERY 5 DAY; 

四、删除事件(DROP EVENT)

织梦好,好织梦

语 法很简单,如下所示: 

DROP EVENT [IF EXISTS] event_name 

例如删除前面创建的e_test事件 

DROP EVENT e_test; 

当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS 

DROP EVENT IF EXISTS e_test; 

create event test 

ON SCHEDULE AT '2007-09-01 12:00:00' + INTERVAL 1 DAY 

on completion not preserve 

do insert into yyy values('hhh','uuu'); 

解释:从2007-09-01开始,每天对表yyy在12:00:00进行一个插入操作。而且只执行一次(on completion not preserve ) 

我的计划任务为: 

create event sysplan 

ON SCHEDULE AT '2014-05-22 23:00:00' + INTERVAL 1 DAY 

on completion not preserve 

do truncate table bjproj.ae_tmp; 

三、通过设定全局变量event_scheduler 的值即可动态的控制事件调度器是否启用。 

查看是否event_scheduler开启mysql> SHOW VARIABLES LIKE '%event%'; 

设置开启mysql> SET GLOBAL event_scheduler=ON; 

四、例子: 

每分钟插入一条日志:DELIMITER //CREATE EVENT `user_log_event` ON SCHEDULE EVERY 1 MINUTE STARTS '2014-05-27 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN INSERT INTO log SET addtime=NOW();END//

织梦好,好织梦

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn