限制sqlite表的最大行数

Jor*_*eña 28 database sqlite database-design database-table

我希望实现一种"活动日志"表,其中用户执行的操作存储在sqlite表中,然后呈现给用户,以便他们可以看到他们已完成的最新活动.但是,当然,我觉得没有必要保留每一段历史记录,所以我想知道是否有办法配置表,一旦达到最大设置限制就开始修剪旧行.

例如,如果限制为100,并且表中当前有多少行,则插入另一个操作时,将自动删除最旧的行,以便始终最多包含100行.有没有办法配置sqlite表来执行此操作?或者我必须经营一个cron工作?

澄清编辑:在任何给定时刻,我想显示表格的最后100个(例如)动作/事件(行).

Nic*_*kis 20

Another solution is to precreate 100 rows and instead of INSERT use UPDATE to update the oldest row.
Assuming that the table has a datetime field, the query

UPDATE ...
WHERE datetime = (SELECT min(datetime) FROM logtable)
Run Code Online (Sandbox Code Playgroud)

can do the job.

Edit: display the last 100 entries

SELECT * FROM logtable
ORDER BY datetime DESC
LIMIT 100
Run Code Online (Sandbox Code Playgroud)

Update: here is a way to create 130 "dummy" rows by using join operation:

CREATE TABLE logtable (time TIMESTAMP, msg TEXT);
INSERT INTO logtable DEFAULT VALUES;
INSERT INTO logtable DEFAULT VALUES;
-- insert 2^7 = 128 rows
INSERT INTO logtable SELECT NULL, NULL FROM logtable, logtable, logtable,
   logtable, logtable, logtable, logtable;
UPDATE logtable SET time = DATETIME('now'); 
Run Code Online (Sandbox Code Playgroud)

  • @Blaenk:假设您的更新将datetime字段设置为它接触的每一行的当前时间,这应该按时间顺序循环遍历各行. (2认同)