mysql动态建表+定时任务(一、直接操作mysql数据库)

注:分两篇博客介绍下方三种自动定时建表方式。

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


 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值