该表具有以下字段:id, date, user_id, city, price
我希望自动删除超过 1 年的行,但我不确定如何执行此操作。应该由应用程序还是数据库来完成?如何?
这里的另一个问题是每年会有大约 5 万次插入。几年后“id”领域会发生什么?数字不会太大吗?在这种情况下可以做什么?
提前谢谢了。
我建议创建一个处理删除记录的基本 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 数据类型。
其实我觉得应该是
date('Ymd', strtotime('-1 年'))