Oracle[转]MySQL 定时器EVENT学习

本文转自:http://home.searchfull.net:8080/2398965-mysql+定时+event+.html

MySQL从5.1开支持event功能,类似oracle的job功能。有了这个作用下咱们就算足以让MySQL自动的履行多少集中等功效,不用像以前用操作的支持了。如linux 
crontab功能。

缔造测试表
CREATE TABLE t
(
    v VARCHAR(100) NOT NULL
) ENGINE INNODB DEFAULT CHARSET=utf8;

 

缔造定时器调用的存储过程
DELIMITER $$

DROP PROCEDURE IF EXISTS e_test $$

CREATE PROCEDURE e_test()
    BEGIN
        INSERT INTO t VALUES(‘1’);
    END $$
   
DELIMITER ;
如若使定时起作用 MySQL的常量GLOBAL event_scheduler必须为on或者是1
— 查看是否被定时器
SHOW VARIABLES LIKE ‘%sche%’; 

— 被定时器 0:off 1:on
SET GLOBAL event_scheduler = 1; 

— 创建事件
–每隔一秒自动调用e_test()存储过程
CREATE EVENT IF NOT EXISTS event_test
ON SCHEDULE EVERY 1 SECOND
ON COMPLETION PRESERVE  
DO CALL e_test();

— 开启事件
ALTER EVENT event_test ON   
COMPLETION PRESERVE ENABLE;  

— 关闭事件
ALTER EVENT event_test ON   
COMPLETION PRESERVE DISABLE;

SELECT * FROM t;

 

部分例:

 

从现在开始每隔九天定时执行
CREATE  EVENT EVENT1

ON SCHEDULE EVERY 9 DAY STARTS NOW()
ON COMPLETION PRESERVE ENABLE
DO
    BEGIN
       CALL TOTAL();
    END




每个月的一号凌晨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



每个季度一号的凌晨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




每年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还是发出接触不同的,这点被作者于麻烦

 在拓展以月度,季,年进行机动调用存储过程 时,为了测试可
把系统改吧年的终极一龙,如2010-12-31 23:59:55;

是Oracle的Job就会见管月,季,年仓储过程实行同样满。但MySQL改了系时了Event也无定时执行。不明白诸位好虾有没来啊好点子?可以化解之题目。

相关文章