我希望实现一种‘活动日志(log)’表,其中用户所做的操作被存储在sqlite表中,然后呈现给用户,这样他们就可以看到他们所做的最新活动.然而,很自然地,我认为没有必要保留历史的每一点,所以我想知道是否有一种方法可以将表配置为一旦达到最大设置限制就开始修剪较旧的行.

例如,如果限制为100,这就是表中当前的行数,则当插入另一个操作时,将自动删除最旧的行,以便始终最多有100行.有没有办法配置sqlite表来执行此操作?或者我必须运行cron作业(job)?

Clarification Edit:在任何给定时刻,我都想显示表的最后Clarification Edit个(例如)操作/事件(行).

推荐答案

另一个解决方案是预先创建INSERT行,使用UPDATE来更新最旧的行,而不是INSERT行.
假设该表具有datetime字段,则查询

UPDATE ...
WHERE datetime = (SELECT min(datetime) FROM logtable)

能胜任这项工作.

Edit:显示最后的Edit: entries

SELECT * FROM logtable
ORDER BY datetime DESC
LIMIT 100

Update:下面是使用联接操作创建130个"虚拟"行的方法:

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'); 

Database相关问答推荐

如何使授权服务器与外部数据库保持同步?

如何高效地存储 100 万个单词并通过starts_with、contains 或ends_with 进行查询?

Spring DriverManagerDataSource vs apache BasicDataSource

实体关系图. IS A 关系如何转换为table表?

任何用于存储过程的静态代码分析工具?

创建数据库索引有哪些最佳实践和经验法则?

基于邮政编码的纬度和经度

按纬度/经度进行半径搜索

在 MySQL 中查看表以进行更改?

在 PostgreSQL 中使用 pg_notify(text, text) 监听/通知

如何使用 SQL 命令文件创建 SQLite3 数据库文件?

SqlAlchemy 中的动态表创建和 ORM 映射

连接池策略效果怎样?

SQLite3 不支持外键约束吗?

日期范围重叠判断约束

使用 JSON 作为存储/传输格式的数据库

从 postgresql 转储文件填充 MySQL 数据库

字符串列上的postgresql索引

数据库 - (行或记录、列或字段)?

使用 oracle sql developer 从一个数据库复制到另一个数据库 - 连接失败