在做项目的过程中,需要用到定时任务做。查看了各种资料,做了个简单的总结。希望自己再遇到的时候有一个参考。
mysql5.1之后又了定时任务
1、查看事件支持是否开启,使用如下命令查看:
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;
以上这三种都可以看见你的MySQL是否开启。
2、 开启定时器 0/off , 1/on
SET GLOBAL event_scheduler = 1;
– 通过动态参数修改 SET GLOBAL event_scheduler = ON
;
将event_scheduler=ON写入my.cnf,一般在/etc/my.cnf下面加入这一行,避免数据库重启之后事件失效。
3、做一个定时任务代码实现部分 ,修改状态为1的订单将use改为2表示已经失效,并且将store和buy修改
创建定时器,调用修改过程 DELIMITER $$
DROP PROCEDURE IF EXISTS mgj_orders_test $$
CREATE PROCEDURE mgj_orders_test()
BEGIN
UPDATE mgj_orders SET
use=2 WHERE status=1 AND now()-
addtime>180;
(注意use是关键字) END $$
DELIMITER;
MySQL解释器,该段命令是否已经结束了,mysql是否可以执行了。默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。其中DELIMITER 定好结束符为"$$"
, 然后最后又定义为 “;
” , MYSQL的默认结束符为”;
“.
但有时候,不希望MySQL这么做。在为可能输入较多的语句,且语句中包含有分号。
这种情况下,就需要事先把delimiter换成其它符号,如//或
。这样只有当
出现之后,mysql解释器才会执行这段语句 .
4、创建事件,每隔一天自动调用修改过程 从这天的10点每天运行一次
CREATE EVENT IF NOT EXISTS mgj_orders_event
ON SCHEDULE EVERY 1 day STARTS '2017-04-23 14:25:00'
ON COMPLETION PRESERVE
DO CALL mgj_orders_test();
–以下是对事件的补充
–开启事件 ALTER EVENT mgj_orders_event ON
COMPLETION PRESERVE ENABLE
;
–关闭事件 ALTER EVENT mgj_orders_enevt ON
COMPLETION PRESERVE DISABLE;
– 删除事件
EVENT使用DROP EVENT语句来删除已经创建的事件,语法如下:
DROP EVENT [IF EXISTS] mgj_orders_event;
–修改事件
–使用ALTER EVENT 来修改事件,具体的ALTER语法如下,与创建事件的语法类似: ALTER EVENT
mgj_orders_event
ON SCHEDULE EVERY 3 minute STARTS '2017-04-23 14:45:00'
ON COMPLETION PRESERVE
DO
UPDATE mgj_orders SET
use=2 WHERE
status=1 AND now() -addtime > 180;
–查看所有事件 SHOW EVENTS
–临时关闭事件 ALTER EVENTS event_name DISABLE
–查看事件创建信息 SHOW CREATE EVENT mgj_orders_event
;