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

标签 sql database sqlite triggers

我在 SQLite 数据库中有一个表“log”,我在其中写入了所有日志文件。

但是我想假装数据库不会变大 - 最聪明的方法是在插入命令上使用触发器 - 至少我这么认为......

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

或者...

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

我需要一个示例代码。

亲切的问候,谢谢。

最佳答案

这将创建一个插入触发器,该触发器将删除创建日期超过 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 个最新的行并删除不在该选择语句中的任何内容。

关于sql - 为 SQLite 创建触发器,当插入新记录时,删除旧记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21235706/

相关文章:

ruby-on-rails - rails : Change my development database from sqlite to postgresql

php - DISTINCT - 再次下载内容

mysql - 将 MySql 转换为 PostgreSQL

mysql - 如何修复查询错误

python - 将数据从 Python 文件上传到 Django 数据库

android - 如何清除 Android ListView 并用新数据填充它?

MySQL 根据 ENUM 值进行选择

sql - 如何去除表中的重复记录?

sql - 在 SQL 中如何使检查约束不区分大小写?

python - 仅使用变量通过 python 对 sqlite 表进行建模