Mysql 创建定时任务 学习教程

自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务,来取代原先只能由操作系统的计划任务来执行的工作。事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。

  1. 首先检查mysql是否开启事件调度器(二选其一)
show VARIABLES like 'event_scheduler';
#或
select @@event_scheduler;
  1. 若开始事件调度器状态为OFF,则需要开启
set global event_scheduler = ON;
#或
set GLOBAL event_scheduler = 1;
spring:
	datasource:
		url: jdbc:mysql://${server.host}:3306/java?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&event_scheduler=1
		hikari:
  1. 执行事件
    event事件语法格式:
drop event if exist upload_to_sdmp; #注:如果原来存在该名字的任务计划则先删除
<pre name="code" class="sql">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}

例:

设置分隔符为 '$' ,mysql默认的语句分隔符为 ';' ,这样在后续的 createend 这段代码都会看成是一条语句来执行
DELIMITER $
 创建计划任务,设置第一次执行时间为'2020-04-10 00:00:00',并且每天执行一次
create event upload_to_sdmp 
on schedule every 1 day starts timestamp '2014-07-30 10:00:00'
#on schedule every 1 SECOND
do
 
#开始该计划任务要做的事
begin

-- do something 编写你的计划任务要做的事
	INSERT aaa VALUES (3,'222');
	INSERT aaa VALUES (2,'222');
 
-- 结束计划任务
 将语句分割符设置回 ';'
DELIMITER ;
end $
  1. 查询所有事件的运行状态
 show events;
  1. 修改事件语法格式:
 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 upload_to_sdmp DISABLE; #关闭事件
ALTER EVENT upload_to_sdmp ENABLE;  #开启事件
  1. 查询事件是否开启
select * from mysql.`定时任务名`;

注:真实的开发环境中,会遇到mysql服务重启或者断电的情况,此时则会出现事件调度器被关闭的情况,所有事件都不在起作用,要想解决这个办法,则需要在mysql.ini文件中加入event_scheduler = ON; 的语句;或者按照第二部的yml文件配置也可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值