当前位置: 移动技术网 > IT编程>数据库>Mysql > MySQL计划任务(事件调度器) Event Scheduler介绍

MySQL计划任务(事件调度器) Event Scheduler介绍

2017年12月12日  | 移动技术网IT编程  | 我要评论

要查看当前是否已开启事件调度器,可执行如下sql:

show variables like 'event_scheduler';

select @@event_scheduler;

show processlist;
若显示:

+-----------------+-------+
| variable_name   | value |
+-----------------+-------+
| event_scheduler | off   |
+-----------------+-------+
则可执行

set global event_scheduler = 1;

set global event_scheduler = on;
来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如:

mysqld ... --event_scheduler=1

my.ini or my.cnf 中的
[mysqld]
添加 event_scheduler=on

创建事件(create 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}

1)首先来看一个简单的例子来演示每秒插入一条记录到数据表

use test;
create table aaa (timeline timestamp);
create event e_test_insert
on schedule every 1 second
do insert into test.aaa values (current_timestamp);
等待3秒钟后,再执行查询成功。

2) 5天后清空test表:

create event e_test
on schedule at current_timestamp + interval 5 day
do truncate table test.aaa;

3) 2007年7月20日12点整清空test表:

create event e_test
on schedule at timestamp '2007-07-20 12:00:00'
do truncate table test.aaa;

4) 每天定时清空test表:

create event e_test
on schedule every 1 day
do truncate table test.aaa;

5) 5天后开启每天定时清空test表:

create event e_test
on schedule every 1 day
starts current_timestamp + interval 5 day
do truncate table test.aaa;

6) 每天定时清空test表,5天后停止执行:

create event e_test
on schedule every 1 day
ends current_timestamp + interval 5 day
do truncate table test.aaa;

7) 5天后开启每天定时清空test表,一个月后停止执行:

create event e_test
on schedule every 1 day
starts current_timestamp + interval 5 day
ends current_timestamp + interval 1 month
do truncate table test.aaa;
[on completion [not] preserve]可以设置这个事件是执行一次还是持久执行,默认为not preserve。

8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):

create event e_test
on schedule every 1 day
on completion not preserve
do truncate table test.aaa;
[enable | disable]可是设置该事件创建后状态是否开启或关闭,默认为enable。
[comment ‘comment']可以给该事件加上注释。

修改事件(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]
1) 临时关闭事件

alter event e_test disable;

2) 开启事件

alter event e_test enable;
3) 将每天清空test表改为5天清空一次:

alter event e_test
on schedule every 5 day;

删除事件(drop event)
语法很简单,如下所示:

drop event [if exists] event_name
例如删除前面创建的e_test事件

drop event e_test;
当然前提是这个事件存在,否则会产生error 1513 (hy000): unknown event错误,因此最好加上if exists

drop event if exists e_test;

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网