g刚开始想到的是用schedule去处理,写个表达式,然后加上@Schedule(cron="")去写,但是后来想想这样还是比较麻烦,然后就尝试了存储过程去写,
结果验证了我的想法,存储过程真的比写schedule简单
如下
1、要想保证能够执行event事件,就必须保证定时器是开启状态,默认为关闭状态
set GLOBAL event_scheduler = ON;
2、要查看当前是否已开启事件调度器,可执行如下SQL:
SHOW VARIABLES LIKE 'event_scheduler
3、如果原来存在该名字的任务计划则先删除
drop event if exist upload_to_sdmp;
4、工具中执行以下 ===========
# set time_zone = '+8:00'; 这行 为改变时间的sql,为了方便测试
set GLOBAL event_scheduler = 1;
-- 设置该事件使用或所属的数据库base数据库
use useCount;
# 如果原来存在该名字的任务计划则先删除
drop event if exists upload_user_count;
# 设置分隔符为 '$$' ,mysql默认的语句分隔符为 ';' ,这样在后续的 create 到 end 这段代码都会看成是一条语句来执行
DELIMITER $$
# 创建计划任务,设置第一次执行时间为'2014-07-30 10:00:00',并且每天执行一次
create event upload_to_sdmp
on schedule every 1 day starts timestamp '2018-11-20 17:30:00'
#on schedule every 1 SECOND
do
# 开始该计划任务要做的事
begin
-- do something 编写你的计划任务要做的事
update userCount set count =count +1 ;
-- 结束计划任务
end $$
# 将语句分割符设置回 ';'
DELIMITER ;
5、事件存在后,需要开启事件,才能使事件(以上代码)生效
- ALTER EVENT upload_user_count ENABLE;
6、测试完成后,关闭测试事件
-
ALTER EVENT upload_user_count DISABLE;
-
7、附上事件状态检查sql
select * from mysql.event;