首页 > 解决方案 > SQLite如何限制记录数

问题描述

我想将我的 SQLite 表中的记录数限制为例如 100 条记录,然后当我插入第 101 条记录时,从表中删除第一条记录(最旧的)。换句话说,我想防止表增长超过 100 条记录,并且总是有最后 100 条记录。SQLite 是否有任何设置或查询,或者我应该手动处理它?提前致谢

标签: c++sqliteqtcounttriggers

解决方案


你可以用触发器来做到这一点。

假设你的桌子是这样的:

CREATE TABLE tablename (
  id INTEGER PRIMARY KEY, 
  name TEXT, 
  inserted_at TEXT DEFAULT (strftime('%Y-%m-%d %H:%M:%f', 'now'))
);

在列inserted_at中,您将获得每行插入的时间戳。
如果您将列声明id为:

id INTEGER PRIMARY KEY AUTOINCREMENT

因为在这种情况下,您可以通过id.

现在创建这个触发器:

CREATE TRIGGER keep_100_rows AFTER INSERT ON tablename
  WHEN (SELECT COUNT(*) FROM tablename) > 100 
  BEGIN
    DELETE FROM tablename
    WHERE id = (SELECT id FROM tablename ORDER BY inserted_at, id LIMIT 1);
    -- or if you define id as AUTOINCREMENT
    -- WHERE id = (SELECT MIN(id) FROM tablename);
  END;
END;

每次插入新行时,触发器都会检查表是否超过 100 行,如果超过,它将删除第一个插入的行。

查看演示(最多 3 行)。


推荐阅读