创建指定数量的行后自动运行?

时间:2010-05-09 05:16:29

标签: php mysql pruning

基本问题,抱歉。基本上,我有一个脚本,每次有人访问页面时都会创建一个MySQL条目。记录脚本。但是,我想在100次访问之后将其设为autoprune。

例如伪代码:

if amount of rows > 100 { delete rows 1+ until amount of rows == 100 }

简而言之,每次在100之后添加新行时,它都需要自动删除id最小的行(我的主键)。

2 个答案:

答案 0 :(得分:0)

您很可能必须锁定表才能获取计数,然后删除“正确”数量的旧记录。因此,我宁愿将SELECT限制为100行,并在表中保留更多记录,即使它们是多余的。您仍然可以删除旧记录,例如每x小时执行一次cron作业,或者每英里x的随机概率:

if ( 10 > rand(0, 8000) ) {
  LOCK TABLES foo
  SELECT COUNT(*) as cnt FROM foo
  if ( $cnt > 100 ) {
    $cnt -= 100;
    DELETE FROM foo ORDER BY id DESC LIMIT $cnt
  }
  UNLOCK TABLES
}

或类似的......

(据我所知,DELETE语句的ORDER BY和LIMIT子句是特定于MySQL的。请记住这一点。)

答案 1 :(得分:0)

另一种可能的选择是使用数据库TRIGGERS (http://forge.mysql.com/wiki/Triggers

在这种情况下可能有点过分,但每次插入行时都会检查表。 一个例子(我还没有测试过!):

创建触发器prune_MyTable     插入MyTable后     对于每一行 开始    DECLARE num_rows INTEGER;    DECLARE lowest_id INTEGER;

SELECT COUNT(*)INTO num_rows FROM MyTable;

IF num_rows> 100那么    SELECT MIN(id)INTO lowest_id     来自MyTable LIMIT 100;

UPDATE MyTable DELETE WHERE id< lowest_id;

结束IF; END $$