该表格包含以下字段:id, date, user_id, city, price
我希望自动删除超过1年的行,但我不确定如何执行此操作。它应该由应用程序还是数据库完成?怎么样?
这里的另一个问题是每年将有大约50,000个插入。几年后“id”领域会发生什么?这个数字会不会太大?在这种情况下可以做些什么?
非常感谢提前。
答案 0 :(得分:3)
我建议creating a basic 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
在您的路径中。当然,这是一个非常基本的shell,可以很容易地扩展,保存已删除的日志,甚至只是将删除的记录移动到新表,一种“软删除”。您可能不应该在main()
中放置这样的破坏性代码,因为每次运行shell时它都会运行,但这会让您开始。
要回答你的第二个问题,每年50k插入是没有什么可担心的。要了解主键的限制,请阅读MySQL数据类型。
答案 1 :(得分:0)
实际上我认为它应该是
日期('Y-m-d',strtotime(' - 1年'))