我想只保存最后200个数据(如果201数据即将到来意味着我需要删除1行等等......)到数据库中的表。是否有任何逻辑?
由于
答案 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语句可以忽略标记的行,并通过单独的内务例程清除。