c++ - SQLite如何限制记录数
问题描述
我想将我的 SQLite 表中的记录数限制为例如 100 条记录,然后当我插入第 101 条记录时,从表中删除第一条记录(最旧的)。换句话说,我想防止表增长超过 100 条记录,并且总是有最后 100 条记录。SQLite 是否有任何设置或查询,或者我应该手动处理它?提前致谢
解决方案
你可以用触发器来做到这一点。
假设你的桌子是这样的:
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 行)。
推荐阅读
- android - xml 自动完成不适用于 android 命名空间
- fortran - 打开已存在的文件时内存引用无效
- vba - 如何捕获在没有自定义表单脚本的情况下完成的 Outlook 2013 任务
- matlab - 使用 add_line() 时出现“输入参数不足”错误
- sql - SQL Server:将值加倍并插入新列 20x
- javafx - gluon mobile (javafx) 是否支持 woff 和 woff2 字体类型?
- rabbitmq - rabbitmq-plugins 看不到erlang版本
- azure - 无法从 Grafana 连接 Azure 中国日志分析
- java - Spring boot JPA & Criteria API - 选择单列
- python - 正则表达式上的错误“不平衡括号”