数据库行限制

时间:2011-01-28 20:24:59

标签: database

我想只保存最后200个数据(如果201数据即将到来意味着我需要删除1行等等......)到数据库中的表。是否有任何逻辑?

由于

2 个答案:

答案 0 :(得分:0)

我认为你不能在一个声明中做到这一点。假设一个表有一个主键列'id',一个数据列'dataCol'和一个时间戳列'dataTime'。这是一种方法(未经测试),只要行数超过200,就会删除最旧的行:

INSERT INTO t (dataCol, dataTime) VALUE ('data', NOW);
DELETE FROM t
 WHERE 200 < (SELECT COUNT (*) FROM t)
   AND id = (SELECT id FROM t ORDER BY dataTime LIMIT 1);

如果您不打算以表格已满的任何原因删除数据,则可以采用其他方法。 (不知道这是否更好。)首先用200个条目预先填充表格。然后创建第二个表,其中包含有关第一个表中内容的簿记信息。第二个表将有一行保留以下信息:

  • 下一个要填充的位置
  • 第一张表是否已满

这个想法是你在第二个表指定的索引处将新数据插入到第一个表中,将第二个表的槽列增量模200增加,并在第一次将槽指针包回0时将完整列设置为1

答案 1 :(得分:0)

如前所述,由于无法更新正在选择的表,因此可能无法在一个语句中执行此操作,使用在需要将行标记为已删除时设置的单个字符标志字段,因此select语句可以忽略标记的行,并通过单独的内务例程清除。