基本问题,对不起。基本上,我有一个脚本,每次有人访问该页面时都会创建一个 MySQL 条目。一个日志记录脚本。但是,我想让它在 100 次访问后自动修剪。
例如在伪代码中:
if amount of rows > 100 {
delete rows 1+ until amount of rows == 100 }
所以简而言之,每次100之后添加新行,都需要自动删除id最小的行(我的主键)。
您很可能必须锁定表才能获得计数,然后删除“正确”数量的旧记录。因此,我宁愿将 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 的。最好记住这一点。)
另一种可能的选择是使用数据库 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;
万一; 结束$$