sqlite, срабатывает, когда таблица достигает максимального количества записей - PullRequest
2 голосов
/ 06 декабря 2011

Можно ли добавить триггер в sqlite3 для удаления N (более старых или, по крайней мере, строк, которые соответствуют фильтру) строк, когда таблица достигает максимального количества записей?Если да, то как?

Простой пример: база данных журнала содержит не более 1000 записей.Когда 1000-я запись вставлена, первые 100 удаляются.Таким образом, мы можем обернуться после достижения определенного размера.

Звонит ли колокол?

1 Ответ

2 голосов
/ 06 декабря 2011

Вот кое-что, что сработало для меня, используя вспомогательную таблицу с именем bookkeepings

create table bookkeepings (bk_name text primary key, bk_value integer not null);

insert or replace into bookkeepings values ('Max Entries', 50);
insert or replace into bookkeepings values ('Qty Entries', 0);

create trigger log_entries_limit_trigger before insert on log_entries
  for each row
  when (select bk_value from bookkeepings where bk_name = 'Qty Entries')
    >= (select bk_value from bookkeepings where bk_name = 'Max Entries')
  begin
    delete from log_entries
      where timestamp = (select timestamp from log_entries order by timestamp limit 1);
  end;

create trigger log_entries_count_insert_trigger after insert on log_entries
  for each row
  begin
    update bookkeepings set bk_value = bk_value + 1 where bk_name = 'Qty Entries';
  end;

create trigger log_entries_count_delete_trigger after delete on log_entries
  for each row
  begin
    update bookkeepings set bk_value = bk_value - 1 where bk_name = 'Qty Entries';
  end;

Вы можете изменить limit 1 на limit 100, чтобы удалить 100 строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...