插入新记录时,为SQLite创建触发器以删除旧记录

时间:2014-01-20 13:46:36

标签: sql database sqlite triggers

我在SQLite数据库中有“log”表,在那里我写了所有日志文件。

但是我想假装数据库变大 - 而这样做的最聪明的方法是使用insert命令的触发器 - 至少我认为是这样......

插入新记录时,触发器将被触发,删除超过10天的所有记录。

或者...

当插入新记录时,触发器将被触发,删除超过特定数量的所有旧记录(例如1000)。

我需要一个示例代码。

亲切的问候,和thx。

1 个答案:

答案 0 :(得分:6)

这将创建一个插入触发器,它将删除创建日期超过10天的任何内容。

CREATE TRIGGER [TRIGGER_NAME] AFTER INSERT ON my_table
BEGIN
    DELETE FROM LOG WHERE DATE(CREATE_DATE) > DATE('now', '-10 days');
END

如果你想做一些基于大小的事情,就像你说1000行一样,你可以做这样的事情。

CREATE TRIGGER [TRIGGER_NAME] AFTER INSERT ON my_table
BEGIN
    DELETE FROM LOG WHERE ROW_NO NOT IN 
        (SELECT TOP 1000 ROW_NO FROM LOG ORDER BY CREATE_DATE DESC);
END

这将选择1000个最新的行,并删除那个不在该select语句中的任何内容。