Mysql - 存储过程 - 定时删表
在工业监控里面, 需要对每天的数据, 进行记录, 时间长了之后, 数据库很容易撑爆. 这时候, 如果允许, 可以对之前的数据进行一次清除, 只记录几个月内的数据.
- delimiter $
- DROP PROCEDURE if exists p_clearOldData;
- /*
- g_date_limit 时间限制, 如 2019_08 , 则删除 该时间之前的表
- g_date_length 时间格式的长度, 如 后缀时间是 2019_08, 则此处应该传 7
- */
- CREATE PROCEDURE `p_clearOldData`(in g_date_limit varchar(30) , in g_date_length int )
- begin
- /*查询到的表名*/
- DECLARE g_table VARCHAR(100);
- /*查询到的表名对应的后缀时间*/
- DECLARE g_date VARCHAR(30) DEFAULT '';
- /*定义done, 用于跳出循环使用*/
- DECLARE done bit DEFAULT 0;
- ###DECLARE g_date_limit VARCHAR(30) DEFAULT '';
- ###DECLARE g_date_length int default 10;
- /*声明游标*/
- DECLARE g_cursor CURSOR FOR select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='abc' and TABLE_NAME like 'tbl_abc_%';
- /*游标查询时, 如果找不到下一个了, 会将done置为1, 用于跳出 REPEAT 循环*/
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
- /*待执行动态sql*/
- set @v_full_sql := '';
- ###set g_date_limit = DATE_FORMAT(date_add(NOW(), interval -90 day),'%Y_%m_%d');
- /*打开游标*/
- open g_cursor;
- /*循环*/
- REPEAT
- FETCH g_cursor into g_table;
- set g_date = right(g_table, g_date_length);
- if g_date < g_date_limit then
- set @v_full_sql = CONCAT('drop table if exists ',g_table);
- /*预编译此动态sql, 并存入stmt中*/
- PREPARE stmt from @v_full_sql;
- /*执行此动态sql, 此动态sql的作用, 是删除表*/
- execute stmt;
- /*释放此资源*/
- DEALLOCATE PREPARE stmt;
- /*对执行情况进行记录*/
- INSERT into tbl_event_log (name, time) values (g_table, NOW());
- end if;
- /*结束repeat循环*/
- UNTIL done END REPEAT;
- /*关闭游标*/
- close g_cursor;
- select 'OK';
- end $
- delimiter;
在数据库中, 进行测试:
- CREATE TABLE `t_bk001_2019_02` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8
执行脚本:
- call p_clearOldData('2019_03', 7);
会发现, 表确实被删除了, 且别的表并未受到影响.
在不能发后台包的情况下, 可以通过mysql定时任务和存储过程, 来实现定时删表操作.
不过, 如果通过这种方式, 还需要对此存储过程进行改动, 或者再创建一个存储过程, 对此进行封装成一个没有参数的存储过程.
对于这种定时任务的执行情况和执行时机, 最好能加入一个日志进去:
- CREATE TABLE `tbl_event_log` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(100) DEFAULT NULL COMMENT '表名',
- `time` datetime DEFAULT NULL COMMENT '时间',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8
*注:
以上操作, 不推荐在mysql中, 通过定时任务和存储过程来实现此功能, 推荐通过后台定时任务, 执行删表操作.
Mysql - 存储过程 - 定时删表的更多相关文章
- MySQL 存储过程删除大表
1.权限问题 alter routine 编辑或删除存储过程 create routine 建立存储过程 execute 创建存储过程 2.存储过程相关的一些命令 show procedure sta ...
- mysql存储过程分库分表
-- 存储过程创建库 分为两条语句删除和创建DELIMITER $$USE myplan $$DROP PROCEDURE IF EXISTS createDBN $$CREATE PROCEDUR ...
- 关于mysql存储过程创建动态表名及參数处理
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 近期游戏開始第二次内測,開始处理操作日志.最開始把日志放到同一个表里面,发现一天时间,平均100玩家 ...
- mysql存储过程批量向表插入数据
业务需要,往某个表中批量插入数据,使用存储过程插入 首先,要建立一张mysql表,表明为phone_number, 三个字段,id 自增,number 就是要插入的表格,is_used 表示十分已经使 ...
- Mysql定时器定时删除表数据
由于测试环境有张日志表没定时2分钟程序就狂插数据,导致不到1一个月时间,这张日志表就占用了6.7G的空间,但是日志刷新较快,有些日志就没什么作用,就写了个定时器,定期删除这张表的数据 首先先查看mys ...
- 【转】MYSQL 存储过程定时操作数据库
这个涉及2个步骤,第一个就是建立存储过程: create procedure clear_table() begin drop database XXX end 第二步就是让其定时运行: 查看even ...
- Mysql 存储过程批量建表
CREATE DEFINER=`root`@`%` PROCEDURE `createTables`() begin declare i int; declare suffix varchar(20) ...
- mysql创建定时执行存储过程任务
sql语法很多,是一门完整语言.这里仅仅实现一个功能,不做深入研究. 目标:定时更新表或者清空表. 案例:曾经做过定时清空位置信息表的任务.(然而,当时并未考虑服务器挂掉后的情况) 本次测试:每5s更 ...
- MYSQL定时创建表分区
MYSQL定时创建表分区 一.存储过程-表分区-----------------------------------------------------------------需求: 每月创建一个分区 ...
随机推荐
- 【西北师大-2108Java】第十四次作业成绩汇总
[西北师大-2108Java]第十四次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第16周学习指导及要求 实验目的与要求 (1)掌握Java应用程序的打包操作: (2)掌握线程概念: (3) ...
- Java内存分析工具MAT
MAT是一个强大的内存分析工具,可以快捷.有效地帮助我们找到内存泄露,减少内存消耗分析工具.内存中堆的使用情况是应用性能监测的重点,而对于堆的快照,可以dump出来进一步分析,总的来说,一般我们对于堆 ...
- 分享Java程序员50多道热门的多线程和并发面试题(答案解析)
下面是Java程序员相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...
- 当h5页面图片加载失败后,给定一个默认图
本文主要讨论页面中图片加载失败后替换默认图片的几种方式 重点来了:一定要记住error事件不冒泡. 相关的知识点:jquery的ready方法.$("img").error().i ...
- ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架
前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机构.用户.角色.权限.菜单等内 ...
- 在Asp.Net或.Net Core中配置使用MarkDown富文本编辑器有开源模板代码(代码是.net core3.0版本)
研究如何使用Markdown你们可能要花好几天才能搞定,但是看我的文章或者下载了源码,你搞定一般在10分钟之内.我先给各位介绍下它: Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯 ...
- 爬虫selenium中动作链接ActionChains
一.基本语法 生成一个动作actions=ActionChains(driver) 动作添加方法actions.方法 执行 actions.perform() 二.方法列表 click(on_elem ...
- PHP http_response_code 网络函数
定义和用法 http_response_code - 获取/设置响应的 HTTP 状态码 版本支持 PHP4 PHP5 PHP7 不支持 支持 支持 语法 http_response_code ([ ...
- CSS样式继承性
CSS样式继承介绍 外层元素身上的样式会被内层元素所继承. 当内层元素身上的样式与外层的元素身上的样式相同时内层元素样式会覆盖外层元素样式. 并不是所有的样式都能够继承,只有文本与字体样式属性才能够被 ...
- OpenCV:增加和减少图像的亮度,图像的加减法
首先导包: import numpy as np import cv2 import matplotlib.pyplot as plt def show(image): plt.imshow(imag ...