注:分两篇博客介绍下方三种自动定时建表方式。
1.直接操作mysql数据库
2.通过java代码定时操作mysql数据库,进行建表
3.存储过程写在mysql上,通过java代码设置定时任务调用存储过程。
希望对有同样困惑的人有帮助
(1)查看数据库定时策略是否开启
show variables like '%event_sche%';
(2)OFF表示没有开启,修改成ON(修改后查再看一次确保修改成功),如果已经是ON,则不用进行(2)
set global event_scheduler=1;
(3)创建存储过程(动态建表)
CREATE DEFINER=`root`@`localhost` PROCEDURE `test_create_table_by_auto`()
BEGIN
set @stmtSql = concat(
'CREATE TABLE IF NOT EXISTS log_', date_format(curdate(),'%y%m%d'),
"(
`stu_id` int(10) NOT NULL AUTO_INCREMENT,
`telephone` int(11) NOT NULL,
`name` varchar(30) NOT NULL DEFAULT '',
PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8");
#预定义sql语句,从用户变量中获取
prepare stmt from @stmtSql;
#执行sql语句
execute stmt;
#释放资源,后续还可以使用
deallocate prepare stmt;
END
(4)创建定时任务(下方sql直接运行即可)
create event test_on_time
--定时
ON SCHEDULE EVERY 1 SECOND
on completion preserve disable
--调用存储过程
do call test_create_table_by_auto();
定时这可做更改,改成希望执行的任意时间(这个无需刻意背,有需要直接去网上找)
-- 单位有:SECOND,MINUTE,HOUR,DAY,WEEK(周),QUARTER(季度),MONTH,YEAR
-- 每秒执行1次
ON SCHEDULE EVERY 1 SECOND
-- 每两分钟执行1次
ON SCHEDULE EVERY 2 MINUTE
-- 每3天执行1次
ON SCHEDULE EVERY 3 DAY
-- 5天后执行
ON SCHEDULE AT CURRENT_TIMESTAMP()+INTERVAL 5 DAY
-- 10分钟后执行
ON SCHEDULE AT CURRENT_TIMESTAMP()+INTERVAL 10 MINUTE
-- 在2016年10月1日,晚上9点50执行
ON SCHEDULE AT '2021-12-01 1:50:00'
-- 5天后开始每天都执行执行到下个月底
ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP()+INTERVAL 5 DAY ENDS CURRENT_TIMESTAMP()+INTERVAL 1 MONTH
-- 从现在起每天执行,执行5天
ON SCHEDULE EVERY 1 DAY ENDS CURRENT_TIMESTAMP()+INTERVAL 5 DAY
-- 每天凌晨一点执行
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
-- 每个月的五号一点执行一次
ON SCHEDULE EVERY 5 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)
-- 每年一月一号凌晨三点执行一次
ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 3 HOUR)
(5)查看是否创建成功
第一种:通过navicat,点击其他,选择事件,可以进行查看,或编辑
第二种:通过sql进行查看
SELECT event_name,event_definition,interval_value,interval_field,status
FROM information_schema.EVENTS;
(6)开启任务
ALTER EVENT test_on_time ON COMPLETION PRESERVE ENABLE;
(7)关闭任务
ALTER EVENT test_on_time ON COMPLETION PRESERVE DISABLE;
(8)删除任务
drop event 任务;
(9)备注:
event_scheduler的修改会随着数据库服务器重启恢复到原来状态,设置开机自动开启需要配置mysql的配置文件my.ini添加下面的一行配置
[mysqld]
event_scheduler=ON