MySQL的event

event

在linux中我们可以使用at或者crontab实现计划任务和周期性任务,那么在mysql中如何实现呢?

在mysql中使用event对象可以实现以下两种需求
(1)在12点钟,执行一个begin and
(2)从12点开始,每隔一个小时,执行一个begin and

1.event对象
调度分为两种:一种是执行一次的,一种是周期性的
对于周期性的调度,我们可以指定周期的开始,周期的结束,每隔多长时间(每分钟,每秒,每天,每个季度,每周),一般我们都指定周期的开始和每隔多长时间,周期的结束一般不指定;没有指定周期的开始,就是从现在开始,没有定义周期的结束,就是永远都不结束;每隔多长时间必须指定

2.event语法:

CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT ‘comment’]
DO event_body;

schedule:
AT timestamp [+ INTERVAL interval] …
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] …] ##开始时间
[ENDS timestamp [+ INTERVAL interval] …] ##结束时间

interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

释义:AT timestamp [+ INTERVAL interval] …表示一个时间加上一个时间间隔,是固定的时间点

  • INTERVAL 1:5 YEAR_MONTH表示为1年5个月

3.event的开关
要想使event生效,必须将参数打开
(1)set global event_scheduler =1;
(2)重启
(3)mysql> show variables like ‘%event_scheduler%’;
±----------------±------+
| Variable_name | Value |
±----------------±------+
| event_scheduler | ON | ##on说明打开
±----------------±------+

4.通过示例深入了解event

示例:需求是每隔一分钟插入数据
create table t2(id int auto_increment primary key,t_time datetime);

delimiter $$

CREATE EVENT e_daily
ON SCHEDULE
EVERY 1 MINUTE ##执行的时间,当前是每隔一分钟
COMMENT ‘Saves total number of sessions then clears the table each day’
DO
BEGIN
INSERT INTO t2 values (null,current_timestamp); ##执行的计划是什么
END $$

delimiter ;

mysql> select EVENT_NAME,LAST_EXECUTED from information_schema.EVENTS;
±-----------±--------------------+
| EVENT_NAME | LAST_EXECUTED |
±-----------±--------------------+
| e_daily | 2016-01-17 18:53:09 |
±-----------±--------------------+
1 row in set (0.00 sec)

示例2:需求是一分钟后执行一个更新语句,执行一次就可以
delimiter $$

CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE ##当前时间加上一分钟
DO
begin
UPDATE t1 SET mycol = mycol + 1; ##将t1表中的mycol列的数据加1
end$$

delimiter ;

show events; ##将events的详细信息显示出来

/var/log/mysqld.log (或者是/usr/local/mysql/data/mysqld.log) ##可以查看mysql的日志文件, 来获取event的执行情况
2016-01-17T10:40:52.018009Z 10 [Note] Event Scheduler: scheduler thread started with id 10
补充:使用tail -f 可以动态查看文件末尾的内容

5.补充event
mysql> select EVENT_NAME,LAST_EXECUTED from information_schema.EVENTS;
语句释义:可以看到定义的event最后一次执行的时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值