mysql definer_mysql 定时维护任务 event

MySQL的Event是一种内部定时任务,类似Linux的cron,用于在指定时间执行SQL代码或按周期执行。事件在独立线程中运行,不接受参数且无返回值。常见应用场景包括定期维护、重建缓存等。Event的创建、修改、查看和删除可通过特定SQL语句完成,例如`CREATE EVENT`、`ALTER EVENT`。同时,需要注意并发控制和事件调度。
摘要由CSDN通过智能技术生成

Mysql 定时任务event

d81a5b6707de3c57246ee28f54658b6f.png

什么是事件

事件是mysql5.1引入的一种新的存储代码的方式,类似于linux的定时任务,不过它完全是mysql内部实现的,你可以创建事件,指定mysql在某个时候执行一段sql代码,或者间隔一个时间执行一段sql代码,通常我们把复杂的sql都封装到一个存储过程中去,然后事件只是简单的调用该存储过程。

事件是在一个独立的事件调度线程中被初始化,这个和处理连接的进程没有任何关系,它不接受任何参数,也没有任何返回值,可以在mysql的日志中看到该命令的执行日志,还可以通过 information_schema.EVENTS看到各个事件的状态,比如最后一次执行时间等。

典型应用场景:

定期维护任务、重建缓存、构建汇总表来模拟物化视图,或者存储用于监控和诊断的状态值等

注意: 如果一个任务执行很长时间,前面的事件还没完成,下一个时间点又开始了, mysql本身是不会防止这种并发的,所以需要用户自己编写这种情况下防止并发代码,我们可以使用函数get_lock()来确保当前总是只有一个事件被执行

我们来看下如何定义一个event

CREATE

[DEFINER = user]

EVENT

[IF NOT EXISTS]

event_name

ON SCHEDULE schedule

[ON COMPLETION [NOT] PRESERVE] 可选项 默认是执行完不删除该事件 如果用 not preserve 则执行完后,即刻删除该event

[ENABLE | DISABLE | DISABLE ON SLAVE]

[COMMENT 'string']

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}

查看event 是否开启

show variables like 'event_scheduler';

开启event

set global event_scheduler=1;

查看所有event

select * from information_schema.EVENTS;

删除event

drop event event_name

禁用/启用 event (默认是启用的)

alter event event_name enable /disable

创建:

create event if not exists myevent on schedule every 1 week

do

insert into test.test(id) values(1)

修改event

Alter event myevent on schedule every 1 week

do

insert into test.test(id) values(2)

创建时间间隔5秒例子

创建一个表

create table test.event_test(id int key auto_increment,dt datetime);

创建event 插入数据

create event if not exists schedult_event on schedule every 5 second

comment ‘时间间隔5秒的例子’

do

insert into test.event_test(dt) values( curdate() );

select *from test.event

这里的时间间隔类型 还有 YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |WEEK | SECOND

创建固定时间例子

create event schedult_event on schedule at '2019-11-25 18:29:03'

do

insert into test.event_test(dt) values( now() );

select * from test.event_test;

创建指定时间范围内周期执行的例子

每天9点50分50秒 到 9点51分0秒期间,每5秒执行一次操作

create event schedult_event on schedule every 5 second

starts timestamp( current_date,'09:50:50')

ends timestamp(current_date, '09:51:00')

do

insert into test.event_test(dt) values( now() );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值