如何在SQLite中使用触发器为特定表设置最大项目数?

如何在SQLite中使用触发器为特定表设置最大项目数?,第1张

如何在SQLite中使用触发器为特定表设置最大项目数?
  1. 您已省略了该
    BEFORE | AFTER
    子句,因此
    BEFORE
    默认情况下为该子句。这意味着您是 在插入 之前( 而不是插入之后)对行进行计数
  2. 这取决于。首先,当表尚未达到限制时,快速计数查找可以为您节省一些时间,因为您可以避免更复杂的删除。但是,一旦表已满,无论如何都必须删除,因此计数只是要做的其他工作。

这应该工作:

private const val MAX_ITEMS = 3private val TIMESTAMP_FIELD = "timestamp"private val DELETe_FROM_CALL_LOG_TILL_TRIGGER =  String.format(    "CREATE TRIGGER %1$s AFTER INSERT ON %2$s      FOR EACH ROW     BEGIN        DELETe FROM %2$s WHERe _id =         (SELECt _id FROM %2$s ORDER BY %4$s DESC LIMIT 1 OFFSET %3$s);     END;"    , "delete_till_reached_max", TABLE_NAME, MAX_ITEMS, TIMESTAMP_FIELD)

一旦表中有400行,您就可以像这样调用触发器

trg_keep_rowcount_constant
并将其
GROUP BY null HAVINgCOUNT(*) > %3$s
从代码中删除。

演示:https://dbfiddle.uk/?rdbms
= sqlite_3.27&fiddle =
ea3867e20e85927a2de047908771f4f1



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4940457.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存