x天后删除sql表

时间:2017-03-29 20:23:08

标签: c++ mysql sql c++11 c++14

我正在寻找一种方法,使用C ++制作的系统在90天后删除旧的sqls表,我搜索但没有找到任何相关内容。

我的表名根据日期生成,例如 20170323

现在要删除的方法我想不出任何可以做的事情

3 个答案:

答案 0 :(得分:0)

假设这些SQL表存在于DBMS而不是您自己的软件系统中 - 请不要将该任务置于您自己的代码中。使用cron等系统工具并编写适当的几行脚本(例如bash,python或perl)来检查旧表并发出删除它们的命令。这不是你应该打扰自定义代码的任务。

我说这是一位现代C ++爱好者: - )

编辑:第二个想法 - 为什么你甚至拥有每日表?我认为这几乎肯定是一种错误的设计。所有这些都可能需要在同一个表中,有一个额外的日期列 - 可能还有一些分区或列式存储等。

答案 1 :(得分:0)

你可以有一个SQL工作来做到这一点。假设每天生成表,您可以拥有一个从sysobjects表中读取表名的作业。循环遍历它们并将表名转换为datetime,然后从当前日期中减去90并将其与从表名得到的日期时间进行比较。

答案 2 :(得分:0)

如果你想在C ++中使用逻辑并且愿意使用Howard Hinnant's free, open-source, header-only date library,你可以写一个像这样的函数:

#include "date.h"
#include <sstream>

void
maybe_remove_table(const std::string& tablename)
{
    using namespace std;
    using namespace std::chrono;
    using namespace date;
    istringstream in{tablename};
    sys_days table_date;
    in >> parse("%Y%m%d", table_date);
    sys_days today = floor<days>(system_clock::now());
    if (table_date < today - days{90})
        remove_table(tablename);
}

此函数将表的名称转换为date::sys_days,这是std::chrono::time_point<system_clock, days>的类型别名。这只是一个粗略的time_point。然后它获取当前日期(由UTC定义),并将表格的日期与当天之前的90天进行比较。