I'd like to create an SQL table that has no more than n rows of data. When a new row is inserted, I'd like the oldest row removed to make space for the new one.
Is there a typical way of handling this within SQLite?
Should manage it with some outside (third-party) code?
Expanding on Alex' answer, and assuming you have an incrementing, non-repeating serial column on table
t
namedserial
which can be used to determine the relative age of rows:This will do nothing when you have fewer than ten rows, and will
DELETE
the lowest serial when anINSERT
would push you to eleven rows.UPDATE
Here's a slightly more complicated case, where your table records "age" of row in a column which may contain duplicates, as for example a
TIMESTAMP
column tracking the insert times.Here we take for granted that we cannot use
id
to determine relative age, so we delete everything after the first 10 rows ordered by timestamp. (SQLite imposes an arbitrary order on rows sharing the samets
).This would be something like how you would do it. This assumes that
my_id_column
is auto-incrementing and is the ordering column for the table.Seems SQLite's support for triggers can suffice: http://www.sqlite.org/lang_createtrigger.html
article on fixed queues in sql: http://www.xaprb.com/blog/2007/01/11/how-to-implement-a-queue-in-sql
should be able to use the same technique to implement "rolling rows"