基本问题,抱歉。基本上,我有一个脚本,每次有人访问页面时都会创建一个MySQL条目。记录脚本。但是,我想在100次访问之后将其设为autoprune。
例如伪代码:
if amount of rows > 100 {
delete rows 1+ until amount of rows == 100 }
简而言之,每次在100之后添加新行时,它都需要自动删除id最小的行(我的主键)。
答案 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 $$