0

该表具有以下字段:id, date, user_id, city, price

我希望自动删除超过 1 年的行,但我不确定如何执行此操作。应该由应用程序还是数据库来完成?如何?

这里的另一个问题是每年会有大约 5 万次插入。几年后“id”领域会发生什么?数字不会太大吗?在这种情况下可以做什么?

提前谢谢了。

4

2 回答 2

3

我建议创建一个处理删除记录的基本 shell,并安排一个 cron 作业,该作业在您希望检查应删除的记录时运行。shell 可能非常简单,如下所示:

class JanitorShell extends AppShell {
    // put the model you wish to delete from here
    public $uses = array('Model'); 

    public function main() {
        $this->Model->deleteAll(array(
          'Model.created <' => date('Y-m-d', '-1 year')
        ));
        $this->out('Records deleted.');
    }
}

然后您的 cron 作业将运行您的 shell。要运行您的 shell,请调用:

cake -app /path/to/app janitor

这假设cake在您的 PATH 中。当然,这是一个非常基本的外壳,可以轻松扩展,保留已删除内容的日志,甚至只是将已删除的记录移动到新表中,这是一种“软删除”。您可能不应该放入这样具有破坏性的代码,main()因为它会在您每次运行 shell 时运行,但这会让您开始。

要回答您的第二个问题,每年 50k 插入是没有什么可担心的。要了解主键的限制,请阅读 MySQL 数据类型。

于 2013-02-14T15:20:23.430 回答
0

其实我觉得应该是

date('Ymd', strtotime('-1 年'))

于 2014-05-12T18:14:39.753 回答