前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL存储过程与定时删表

MySQL存储过程与定时删表

作者头像
星哥玩云
发布2022-08-18 16:47:53
1.4K0
发布2022-08-18 16:47:53
举报
文章被收录于专栏:开源部署

在工业监控里面,需要对每天的数据,进行记录,时间长了之后,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_cursor CURSOR FOR select TABLE_NAME from INFORMATION_SCHEMA.TABLES  where TABLE_SCHEMA='tt_abc' and TABLE_NAME like 't_bk001_%';

    /*游标查询时, 如果找不到下一个了, 会将done置为1, 用于跳出 REPEAT 循环*/   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    /* 待执行动态sql */     set @v_full_sql := '';

    /*打开游标*/     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;

        end if;

    /*结束repeat循环*/     UNTIL done END REPEAT;

    /*关闭游标*/     close g_cursor;

select 'OK';

end $ delimiter;

MySQL数据库中, 进行测试:

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定时任务和存储过程, 来实现定时删表操作。

不过, 如果通过这种方式, 还需要对此存储过程进行改动, 或者再创建一个存储过程, 对此进行封装成一个没有参数的存储过程。

*注:

以上操作,不推荐在MySQL中通过定时任务和存储过程来实现此功能,推荐通过后台定时任务执行删表操作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档