如题,怎么样让数据库定时每月1日查询下表a取下b、c、d并将数据另外生成一个表,表名为202106这样,
-- 启用事件调度器
SET GLOBAL event_scheduler = 1;
-- 创建任务存过
DELIMITER $$
CREATE PROCEDURE PROC_TEST1()
BEGIN
SET @sqlstr = CONCAT(' CREATE TABLE test_',DATE_FORMAT(now(),'%Y%m') ,' AS SELECT * FROM tb1');
PREPARE stmt1 FROM @sqlstr ;
EXECUTE stmt1 ;
END $$
DELIMITER ;
-- 创建每月定时任务
CREATE EVENT TEST_MONTH_JOB
ON SCHEDULE EVERY 1 MONTH
STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 0 HOUR)
DO
CALL PROC_TEST1();
生成如下表
test_202106
Mysql有一个方法。就是将查询的结果生成一个表。
create table new_table_name as select * from (your_sql) as sql_table;
new_table_name 替换为创建表名
your_sql 替换为sql语句
至于定时生成一个表的话,这需要使用到定时任务调度器azkaban。
如果对你有帮助的话,请采纳一下哦,谢谢!
为啥你要借助数据库操作呢,你应该是语言的定时任务去做,比如spring quartz,等等,直接在数据库层面做的话,感觉不太好。
你可以使用脚本的形式去做,shell,linux下:
shell脚本操作mysql数据库 (部份参考) https://blog.51cto.com/devin223/1693248
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
建表属于消耗资源非常大的事情,不建议这么搞