Предел строк в базе данных - PullRequest
0 голосов
/ 28 января 2011

Я хочу хранить только последние 200 данных (если поступает 201, значит, мне нужно удалить 1 строку и т. Д.) В таблицу в базе данных. Есть ли логика?

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 января 2011

Как уже упоминалось, это, вероятно, невозможно сделать в одном операторе, так как вы не можете обновить таблицу, из которой вы выбираете, использовать одно поле флага символа, которое устанавливается, когда строка должна быть отмечена как удаленная, таким образом,отмеченные строки могут быть проигнорированы операторами выбора и очищены отдельной служебной процедурой.

0 голосов
/ 28 января 2011

Я не думаю, что вы можете сделать это в одном утверждении. Предположим, что таблица имеет столбец первичного ключа «id», столбец данных «dataCol» и столбец отметки времени «dataTime». Вот подход (не проверенный), который удаляет самую старую строку всякий раз, когда количество строк превышает 200:

INSERT INTO t (dataCol, dataTime) VALUE ('data', NOW);
DELETE FROM t
 WHERE 200 < (SELECT COUNT (*) FROM t)
   AND id = (SELECT id FROM t ORDER BY dataTime LIMIT 1);

Если вы не собираетесь удалять данные по любой причине, за исключением того, что таблица заполнена, тогда возможен другой подход. (Понятия не имею, лучше ли это.) Начните с предварительного заполнения таблицы 200 записями. Затем создайте вторую таблицу с бухгалтерской информацией о том, что находится в первой таблице. Вторая таблица будет иметь одну строку, в которой хранится следующая информация:

  • следующий слот для заполнения
  • заполнена ли первая таблица

Идея состоит в том, что вы вставляете новые данные в первую таблицу по индексу, заданному второй таблицей, увеличиваете столбец слотов второй таблицы по модулю 200 и устанавливаете полный столбец на 1, когда первый раз указатель слота возвращается к 0 .

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