MYSQL定时执行事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL定时执行事件相关的知识,希望对你有一定的参考价值。
请问怎样实现mysql 定时事件。
比如 一个表中。一个字段ID=1 怎样让这个字段 在1分钟后更新为ID=20且只是执行一次。 或者在这个字段上实现 各一秒递减一次。 ID = ID-1执行到ID=0 为止。 这种。 求大佬帮助!!
具体操作如下:
先看看看event 事件是否开启
show variables like '%sche%';
如没开启,则开启。需要数据库超级权限
set global event_scheduler =1;
创建存储过程 update_a (注:就是你要执行的sql语句)
mysql> create procedure update_a() update a set a.y_avg=(select avg(b.youhao) from b where a.a_id=b.a_id);
创建一个定时任务:event e_updateA
mysql> create event if not exists e_updateA
-> on schedule every 60 second ---设置60秒执行一次
-> on schedule at date_add(now(),interval 1 minute) ---在一分钟后执行
-> on completion preserve
-> do call update_a(); ---执行update_a()存储过程
创建Event之后,sql语句就定时执行一次。
关闭事件任务 参考技术A MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。
mysql 定时任务的使用
mysql5.1.6增加了一个事件调度器(Event Scheduler),可以做定时任务(定时删除记录,定时数据统计),取代之前系统的计划任务。mysql事件调度器可以精确到每秒执行一个任务。
事件调度器与触发器的区别:事件调度器是基于特定时间周期来触发执行某些任务,触发器是基于某个表产生的事件来触发。
一、查看是否开启
> show variables like \'event_scheduler\';
二、开启事件调度器
set global event_scheduler = on;
这里的设置,当mysql重启后,又会自动关闭。如果需要一直开启,需要在my.ini中配置如下:
event_scheduler = on
三、创建事件语法
CREATE EVENT [IF NOT EXISTS ] event_name ON SCHEDULE schedule [ ON COMPLETION [ NOT ] PRESERVE ] [ ENABLE | DISABLE ] [ COMMENT \'注释\' ] DO SQL语句; schedule : AT TIMESTAMP [+ INTERVAL interval ] | EVERY interval [ STARTS TIMESTAMP ] [ ENDS TIMESTAMP ] interval : quantity { YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND }
event_name:事件名,最大长度64个字符。
schedule:执行时间。
[ ON COMPLETION [ NOT ] PRESERVE ] :事件是否需要复用。
[ ENABLE | DISABLE ] :事件开启或关闭。
四、关闭事件
ALTER EVENT event_name DISABLE;
五、开启事件
ALTER EVENT event_name ENABLE;
六、删除事件
DROP EVENT [IF EXISTS ] event_name;
七、查看所有事件
SHOW EVENTS;
八、事件例子
我们先创建一个简单的test表用于测试
CREATE TABLE `test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT \'ID\', `now` datetime DEFAULT NULL COMMENT \'时间\', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
事件类型有两种,一种是间隔触发,一种是特定时间触发
我们每隔一秒向test表插入一条记录:
DROP EVENT IF EXISTS event_test; CREATE EVENT event_test ON SCHEDULE EVERY 1 SECOND STARTS \'2017-08-22 11:57:00\' ENDS \'2017-08-22 12:00:00\' ON COMPLETION PRESERVE ENABLE COMMENT \'每隔一秒向test表插入记录\' DO INSERT INTO test VALUES(NULL, now());
我们指定时间来向test表插入一条记录:
DROP EVENT IF EXISTS event_test2; CREATE EVENT event_test2 ON SCHEDULE AT \'2017-08-22 12:01:00\' ON COMPLETION PRESERVE ENABLE COMMENT \'指定时间向test表插入记录\' DO INSERT INTO test VALUES(999999, now());
以上是关于MYSQL定时执行事件的主要内容,如果未能解决你的问题,请参考以下文章