先查看一下你的MSYQL版本,查询版本信息的SQL语句:

SELECT VERSION()
确定版本支持之后,再查看一下event是否开启:

SHOW VARIABLES LIKE \’%sche%\’;

如果未开启,那如何开启呢?

SET GLOBAL event_scheduler =1;
SHOW VARIABLES LIKE \’%sche%\’;

一般定时执行有2种:
1、从具体一个时间点开始,每隔一段时间执行一次;
从现在开始,每30秒执行一次插入一个语句
CREATE event IF NOT EXISTS e_test
ON SCHEDULE EVERY 30 SECOND STARTS NOW()
ON COMPLETION PRESERVE
DO
INSERT INTO sdb_yoyi (yoyiscid,orderid) VALUES(2,3)

也可以把DO后面的改为执行一个存储过程
例如
DO
CALL fn_test_time();
2、从具体一个时间点开始,在当日的某个时间点进行执行;

每个月的一号凌晨1点执行
CREATE event IF NOT EXISTS e_test2
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
DO
INSERT INTO sdb_yoyi (yoyiscid,orderid) VALUES(2,3)
也可以对事件任务进行关闭:
ALTER event e_test ON
COMPLETION PRESERVE DISABLE;
对已经关闭的事件任务进行开启:
ALTER event e_test ON
COMPLETION PRESERVE ENABLE;

 

实际演示

DELIMITER $$

CREATE EVENT `ev_StartCourseMessaag` ON SCHEDULE EVERY 1 DAY STARTS \'2013-01-22 08:00:00\' ON COMPLETION PRESERVE ENABLE DO BEGIN
        CALL fn_ev_StartCourseMessaag();
    END$$

DELIMITER ;

DELIMITER $$

CREATE EVENT `ev_ResectHomeWork` ON SCHEDULE EVERY 30 MINUTE STARTS \'2013-01-05 16:50:18\' ON COMPLETION PRESERVE ENABLE DO BEGIN
	    CALL fn_even_ResectHomeWork();
	END$$

DELIMITER ;

怎么样让mysql每次重启之后,都能自动开启事件呢?   修改mysql配置文件mysql.ini,默认开启event_scheduler。

在mysql安装的文件夹下找到配置文件my.ini,在[mysqld]的下面加上一句:event_scheduler=ON。这样mysql在启动的时候event sheduler就会自动启动了。

版权声明:本文为joeylee原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/joeylee/archive/2013/01/03/2842971.html