mysql event scheduler机制 与 动态表名创建
今天有一个需求,需要定时在mysql创建表与删除表,以及根据日期命名表名。诚然,通过外部程序很容易实现与控制这一切。
但是需要额外的服务需要维护,以及实现其它的调度机制。为了提高服务的稳定性,可维护性,所以打算研究一下mysql的event scheduler机制。
在网上了解了一下这方面内容,非常杂乱。而且基本雷同。经过自己的摸索,终于实现。算是对其它文章的一个补充。
方案如下:(mysql 5.1以后版本)
1. 查看当前是否已开启event scheduler机制,检查方法:SHOW VARIABLES LIKE 'event_scheduler'; 如果显示的值为OFF,则首先需要开启。
2. 开启方法: 修改 /etc/my.cnf 文件
[mysqld]
添加 event_scheduler=ON
3 . 重启 mysql 服务。
4. create event 语法:
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
5. 范例:
CREATE DEFINER = hotonline EVENT IF NOT EXISTS create_aronline_evnet
ON SCHEDULE EVERY 1 DAY STARTS '2013-03-17 12:00:00'
DO
call create_aronline_procedure();
其中 create_aronline_evnet 为 event 名称,建好以后可以去 mysql.event表查询。
EVERY 1 DAY STARTS '2013-03-17 12:00:00' 为自从 2013-03-17 12:00:00 开始 每天运行一次。
call create_aronline_procedure(); 为执行的一个存储过程。
-------- 以上即为 event scheduler 的机制,具体语法请参考mysql 文档,或网上其它文档 --------------
6. mysql 动态表名的实现:( 通过一般sql 是无法实现的,需要prepare支持,一下为存储过程封装的)
delimiter $$
create procedure create_aronline_procedure()
begin
set @prefix = 'CREATE TABLE IF NOT EXISTS ';
set @tablename = CONCAT('ar_online_',date_format(date_add(now(), interval 1 day),'%Y_%m_%d'));
set @suffix = '(id bigint(20) NOT NULL AUTO_INCREMENT,seed bigint(20) DEFAULT NULL,vid bigint(20) DEFAULT NULL,count int(11) NOT NULL,score double DEFAULT NULL,update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY pair (seed,vid)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8';
set @create_sql = concat(@prefix,@tablename,@suffix);
prepare stmt from @create_sql;
execute stmt;
deallocate prepare stmt;
end;
$$
delimiter ;
核心语法为红色标注的。
set @tablename = CONCAT('ar_online_',date_format(date_add(now(), interval 1 day),'%Y_%m_%d')); 这个部分为根据日期生成表名,然后concat.
prepare stmt from @create_sql; 其中 stmt 为 prepare 的命名。
转载于:https://www.cnblogs.com/g4279/p/4345043.html
mysql event scheduler机制 与 动态表名创建相关推荐
- mysql 动态创建事件_mysql 通过事件定时为数据库创建动态表名
#检测事件是否开启 show variables like 'event_scheduler'; #开启事件(最好在my.init设置,因为重启后还会变回默认值OFF) set global even ...
- mysql 存储过程 动态表名
今天写存储过程时,遇到要将表名最为参数的问题,如果不涉及到游标的话,使用prepare可以解决问题,但是,动态表名要运用在游标中的话,则prepare就得靠边站了. 集众人之智慧,最后,使用临时表解决 ...
- mysql下解决动态表名
之前在编写一段sql,内容如下:show create table ? 用占位符占了表名的坑,目的是查询建表语句,使用的模块是jdbcTemplate. 然而我发现,查询出来的结果是sql语法有 ...
- talend同步mysql_Talend可以为MySQL输出使用动态表名吗?
(用于数据集成的Talend OS) 可以使用动态表名吗?我已经研究了用户手册中的所有资源,尽管它们似乎都没有明确排除它,但我似乎无法使其正常工作. 情境 假设您有一个由1,000,000个名字组成的 ...
- mysql event 同步,MySQL Event Scheduler(事件调度器)
这篇文章主要为大家详细介绍了MySQL Event Scheduler(事件调度器),具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编小韵来看看吧!一.概述 事件调 ...
- MYSQL存储过程中 使用变量 做表名--转
原文地址:http://blog.csdn.net/business122/article/details/7528859 今天写一个对数据库做快照的存储过程,用到了动态表名,突然发现MYSQL不支持 ...
- Mybatis-Plus动态表名插件实现数据库分表查询
浮生若梦,就当它是梦,尽兴地梦它一场:世事如云,就当它是云,从容地观它千变万化. Mybatis-Plus中提供了各种插件,乐观锁.多租户.动态表名....今天来研究一下基于动态表名插件实现分表的案例 ...
- MyBatis-Plus动态表名插件使用
一.MyBatis-Plus动态表名插件使用 官方文档-动态表名插件:https://baomidou.com/pages/2a45ff/#dynamictablenameinnerintercept ...
- mysql中存储过程 解决参数作为表名
关键字: mysql 存储过程 1.用变量做表名: 简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名.在其他的sql数据库中也是如此,mss ...
最新文章
- 【论文解读】KDD20 | 图神经网络在生物医药领域的应用
- Android 可视化界面编辑器无法显示界面问题的终极解决方案
- 自动驾驶_视觉定位_高德公开课
- lammps建模_LAMMPS常用建模方法总结
- 电子商务B2C之未来-刘爽
- 网络安全之数据加密和数字签名技术
- 清华计算机系分数线2018四川,四川多少分能上清华?附清华大学在四川的录取分数线...
- TeamCity VS Jenkins:选择正确的CI / CD工具
- ds5100更换电池 ibm_IBMDS5100更换电池
- 如何用中文编程c++
- 一家计算机专卖店A型计算器,A型计算器谱子 | 手游网游页游攻略大全
- hdmi怎么支持2k分辨率_为什么显示器闪瞎眼 HDMI线版本有讲究
- 微信刷脸支付php后端,2.1 微信刷脸支付初始化
- 027 反三角函数的求导公式推导
- 计算机专业英语 论文的框架结构,大学英语议专业论文写作万能15句框架结构模版.pdf...
- 【其它】visio画泳道图/跨职能流程图
- visibility与display的区别:
- ubuntu系统安全UFW
- Luogu P3165 Splay区间翻转
- amd一键超频怎么用_老锅教你超频-AMD处理器篇
热门文章
- 面试:Spring Boot 中的条件注解底层是如何实现的?
- 来自十年互联网人的大厂等级晋升攻略
- 谷歌和 Facebook 是如何给工程师定职级和薪水的?
- 渔村小厂,如何成长为5G霸王?
- 服务端 I/O 性能大比拼:Node、PHP、Java、Go哪家强?
- 追求极简:Docker镜像构建演化史
- 3分钟了解dubbo服务调试管理实用命令
- Underscore.js 入门
- Android --- View.inflate()的详细介绍
- 2022年年底前山东将打造30个以上绿色数据中心 逐步淘汰高能耗中小型数据中心...