Mysql - 存储过程 - 定时删表-阿里云开发者社区

开发者社区> 推荐码发放> 正文

Mysql - 存储过程 - 定时删表

简介: Mysql - 存储过程 - 定时删表在工业监控里面, 需要对每天的数据, 进行记录, 时间长了之后, 数据库很容易撑爆. 这时候, 如果允许, 可以对之前的数据进行一次清除, 只记录几个月内的数据.
+关注继续查看

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;
复制代码
在数据库中, 进行测试:

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中, 通过定时任务和存储过程来实现此功能, 推荐通过后台定时任务, 执行删表操作.
原文地址https://www.cnblogs.com/elvinle/p/11444781.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQL Server 数据库定时自动备份
原文:SQL Server 数据库定时自动备份 SQL Server 数据库定时自动备份——每天定时备份,保留前8天的备份 利用SQL Server代理新建作业来定期备份 1)在数据库库的【SQL Server代理】->【作业】,右键【新建作业】 2)在【常规】选项卡设置【名称】(自定义) ...
1050 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10052 0
MySQL数据库 Event 定时执行任务.
一、背景   由于项目的业务是不断往前跑的,所以难免数据库的表的量会越来越庞大,不断的挤占硬盘空间。即使再大的空间也支撑不起业务的增长,所以定期删除不必要的数据是很有必要的。在我们项目中由于不清理数据,一个表占的空间竟然达到了4G之多。
1222 0
Java 执行 Postgresql Jdbc 类型异常时,复杂sql难定位的解决方案
Java 执行 Postgresql Jdbc 类型异常时,复杂sql难定位的解决方案
70 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13865 0
sql定时备份
    老规矩,直接上代码: declare @name varchar(250) set @name='C:\Backup\MyStudy_'+ convert(varchar(50),getdate(),112)+'.bak' BACKUP DATABASE[MyStudy]TO DISK=@name WITH NOFORMAT, NOINIT, NAME = N'MyStudy-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD     上面sql写到一个定时作业里即可定时备份,文件名称是库名+杠+时间(年月日)。
685 0
+关注
推荐码发放
阿里云优惠码阿里云推荐券bieryun.com
378
文章
5
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载