- 您已省略了该
BEFORE | AFTER
子句,因此BEFORE
默认情况下为该子句。这意味着您是 在插入 之前( 而不是插入之后)对行进行计数。 - 这取决于。首先,当表尚未达到限制时,快速计数查找可以为您节省一些时间,因为您可以避免更复杂的删除。但是,一旦表已满,无论如何都必须删除,因此计数只是要做的其他工作。
这应该工作:
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)