5.1版本以后,MYSQL支持定时执行(event)的功能,就跟linux的crontab差不多。
一、先查看一下你的MSYQL版本,查询版本信息的SQL语句:
- select VERSION();
确定版本支持之后,再查看一下event是否开启:
二、查看是否开启event
1 MySQL event功能默认是关闭的,可以使用下面的语句来看event的状态,如果是OFF或者0,表示是关闭的。
- show variables like '%sche%';
如果未开启,那如何开启呢?
2 开启event功能
SET
GLOBAL
event_scheduler = 1;
三、定时任务
1、创建event语法
| CREATE EVENT [IF NOT EXISTS] event_name |
| ON SCHEDULE schedule |
| [ ON COMPLETION [ NOT ] PRESERVE] |
| [ENABLE | DISABLE] |
| [COMMENT 'comment' ] |
| DO sql_statement; |
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}
一般定时执行有2种:
2、从具体一个时间点开始,每隔一段时间执行一次;
从现在开始,每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)
3、从具体一个时间点开始,在当日的某个时间点进行执行;
每个月的一号凌晨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)
四、
1、也可以对事件任务进行关闭:
- alter event e_test ON
- COMPLETION PRESERVE DISABLE;
2、对已经关闭的事件任务进行开启:
- alter event e_test ON
- COMPLETION PRESERVE ENABLE;
3、删除事件
- drop event [IF EXISTS] event_name;
4、修改事件(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] |