1

可以在 SQLite 上创建一个“复杂”触发器吗?对于复杂的,我的意思是触发器主体应该提供对表中的行进行计数,然后如果计数大于固定值,则删除一些行以满足 previuos 条件

4

2 回答 2

0

假设这ID是一个自动递增列,以下查询将找到那些具有 100 个最高ID值的记录,即那些不应该删除的记录:

SELECT *
FROM MyTable
ORDER BY ID DESC
LIMIT 100

这允许编写以下触发器:

CREATE TRIGGER DeleteOldestMoreThan100
AFTER INSERT ON MyTable
-- WHEN (SELECT COUNT(*) FROM MyTable) > 100  -- not needed
BEGIN
    DELETE FROM MyTable
    WHERE ID NOT IN (SELECT ID
                     FROM MyTable
                     ORDER BY ID DESC
                     LIMIT 100);
END;
于 2013-09-26T16:37:07.513 回答
0

您应该能够使用触发器定义的 WHERE 子句来执行此操作,例如 WHERE count(*>100。然后在触发器的操作部分中,定义一个带有 WHERE 子句的 DELETE 语句,该子句标识您想要的“最旧”条目删除。

于 2013-09-26T16:16:06.437 回答