0

基本问题,对不起。基本上,我有一个脚本,每次有人访问该页面时都会创建一个 MySQL 条目。一个日志记录脚本。但是,我想让它在 100 次访问后自动修剪。

例如在伪代码中:

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

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

4

2 回答 2

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 的。最好记住这一点。)

于 2010-05-09T07:45:30.520 回答
0

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

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

创建触发器 prune_MyTable AFTER INSERT ON MyTable FOR EACH ROW BEGIN DECLARE num_rows INTEGER; 声明最低 ID 整数;

从 MyTable 中选择 COUNT(*) INTO num_rows;

IF num_rows > 100 THEN SELECT MIN(id) INTO minimum_id FROM MyTable LIMIT 100;

UPDATE MyTable DELETE WHERE id < minimum_id;

万一; 结束$$

于 2010-05-09T10:17:50.817 回答