当前位置: 首页 > 面试题库 >

SQLite:如何根据时间戳限制行数?

嵇丰
2023-03-14
问题内容

我成功使用以下BEFORE INSERT触发器来限制存储在SQLite数据库表 位置中 的行数。数据库表充当Android应用程序中的缓存

CREATE TRIGGER 'trigger_locations_insert'
BEFORE INSERT ON 'locations'
WHEN ( SELECT count(*) FROM  'locations' ) > '100'
  BEGIN
    DELETE FROM 'locations' WHERE '_id' NOT IN
    (
      SELECT '_id' FROM 'locations' ORDER BY 'modified_at' DESC LIMIT '100' 
    );
  END

同时,我添加了第二个触发器,使我可以INSERT OR UPDATE行。-关于该主题的讨论可以在另一个主题中找到。第二个触发器需要一个VIEW在其INSERT上执行的触发器。

CREATE VIEW 'locations_view' AS SELECT * FROM 'locations';

由于INSERT不再在TABLE 位置 上执行,而是在VIEW locations_view
上执行,因此上述触发器不再起作用。如果我将触发器应用于VIEW以下错误消息。

Failure 1 (cannot create BEFORE trigger on view: main.locations_view)

问题:

如何更改上述触发器以INSERTVIEW-上观察每个触发器,或者您是否建议另一种限制行数的方法?我宁愿在数据库中处理这种操作,而不是在客户端上运行前端代码。

性能问题:

虽然,限制器(上面的触发器)总体上起作用-它的性能低于最佳效果!实际上,数据库操作花费了很长时间,因此引发了ANR。据我所看到的,其原因是,该限制器被称为

一个时间INSERT发生。为了优化设置,INSERT应将大宗交易包装成一个事务,然后限制器应立即执行。这可能吗?如果您想提供帮助,请将有关批量的优化注释INSERT放入原始问题中。欢迎在此发表有关限幅器的评论。


问题答案:

这种触发器应与其他触发器一起正常工作。问题似乎是SQL不必要地引用了该_id字段。它为每一行选择文字字符串“
_id”,并将其与相同的文字字符串进行比较。

删除引号'_id'DELETE和子引号中SELECT)都可以解决此问题。



 类似资料:
  • 本文向大家介绍sqlite时间戳转时间语句(时间转时间戳),包括了sqlite时间戳转时间语句(时间转时间戳)的使用技巧和注意事项,需要的朋友参考一下 下面是具体的实现代码:

  • 问题内容: 如何从MongoDB集合中的时间(HH:MM:SS.Milisecond)值大于零的日期字段中选择记录,并通过保持日期的时间(HH:MM:SS)值为零来更新记录值是否与Python脚本中的现有值相同? 当前数据如下所示- 如何在Python脚本中仅选择第4、5、6和7行,并使用时间戳将其更新为零? 更新后,数据如下所示- 问题答案: 最好的方式来更新您的文件,并在时间使用日期时间模块,

  • 问题内容: 有些sql写得不好。有时,搜索需要花费数小时的申请时间。当一个应用程序(可能是一个网站)提交运行时间很长的查询时,我必须重新启动mysql。如何在数据库端限制sql查询的执行时间? 问题答案: 要在很长的执行时间后自动终止MySQL中的查询,请执行以下操作: 创建一个存储过程为: 然后在curosr的循环中执行以下操作: 创建,只是里面的上述步骤。 注意:KILL QUERY只是杀死查

  • 说明 pika新版binlog有时间戳,开发binlog_sender工具,根据输入的时间段回放对应数据到某个pika实例 工具目录: pika/tools/binlog_tools/binlog_sender 使用参数: -h -- 显示帮助 -t -- l 显示日志类型,old 或new -i -- pika实例的ip -p -- pika实例的port -n -- 输入的binlog的路径

  • 问题内容: 我想在docker容器中运行命令。如果该命令花费了3秒钟以上的时间,则应删除该容器。 我以为可以通过使用中的option 来实现此目标。 但是我的命令似乎出了点问题。 例如,命令创建一个持续3秒以上的Docker容器。第三秒后,容器不会停止或删除。 我是否误解了? 该文件说: 停止容器的超时时间(以秒为单位) 这是我的Docker版本: API版本比1.25更新。 问题答案: 该选项是

  • 问题内容: 我刚刚发现,运行日历脚本时,PHP中的时间戳限制为2038。这实际上是什么意思?为什么是2038,而不是2050或2039?如果时间戳仅是从给定日期(1970年)起算的秒数,为什么还要设置限制? 问题答案: 该限制是由大多数C库用来表示该计数的4字节带符号整数强加的。快速数学(假设365天年,并非完全正确): 这也意味着下限约为1900。一些库已经开始引入64位纪元计数,但目前它们之间