MySQL计划任务(事件调度器) Event Scheduler介绍
要查看当前是否已开启事件调度器,可执行如下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;
推荐阅读
-
MySQL计划任务(事件调度器) Event Scheduler介绍
-
MySQL计划任务(事件调度器) Event Scheduler介绍_MySQL
-
MySQL计划任务(事件调度器) Event Scheduler介绍_MySQL
-
Mysql Linux安装和事件调度器(Event Scheduler)
-
MySQL Event Scheduler(事件调度器)_MySQL
-
详解MySQL用事件调度器Event Scheduler创建定时任务
-
详解MySQL用事件调度器Event Scheduler创建定时任务
-
MySQL Event Scheduler(事件调度器)
-
MySQL Event Scheduler(事件调度器)
-
老生常谈mysql event事件调度器(必看篇)