当前位置:  开发笔记 > 数据库 > 正文

在SQL表中滚动行

如何解决《在SQL表中滚动行》经验,为你挑选了1个好方法。

我想创建一个不超过n行数据的SQL表.插入新行时,我希望删除最旧的行以为新行添加空间.

在SQLite中有一种典型的处理方式吗?

应该用一些外部(第三方)代码来管理它吗?



1> pilcrow..:

扩大对Alex的答案,假设你有一个递增的,不重复的表上连载专栏t命名serial可以用来确定行的相对年龄:

 CREATE TRIGGER ten_rows_only AFTER INSERT ON t
   BEGIN
     DELETE FROM t WHERE serial <= (SELECT serial FROM t ORDER BY serial DESC LIMIT 10, 1);
   END;

当你的行数少于10行时,这将无效,而DELETEINSERT你将行数推到11行时,它将是最低的序列.

UPDATE

这是一个稍微复杂的案例,其中您的表记录列中可能包含重复项的行的"年龄",例如TIMESTAMP跟踪插入时间的列.

sqlite> .schema t
CREATE TABLE t (id VARCHAR(1) NOT NULL PRIMARY KEY, ts TIMESTAMP NOT NULL);
CREATE TRIGGER ten_rows_only AFTER INSERT ON t
  BEGIN
    DELETE FROM t WHERE id IN (SELECT id FROM t ORDER BY ts DESC LIMIT 10, -1);
  END;

在这里我们理所当然地认为我们不能id用来确定相对年龄,所以我们删除了按时间戳排序的前10行之后的所有内容.(SQLite对共享相同的行强制执行任意顺序ts).

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有