【问题标题】:SQLite how to limit the number of recordsSQLite如何限制记录数
【发布时间】:2021-04-19 08:43:06
【问题描述】:

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

【问题讨论】:

  • 您可能需要手动处理。
  • 没有 SQL 查询允许您这样做。您可以使用 SQL 查询检索最新的 100 条记录,但该表仍会存储更多记录。如果新条目超过 100 行,您将需要在 C++ 中编写一个函数,该函数在添加条目时删除最早的条目

标签: c++ sqlite qt


【解决方案1】:

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

说你的桌子是这样的:

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 行,如果超过则删除第一个插入的行。

请参阅demo(最多 3 行)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2011-02-11
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多